From a34e9afcdf667d7940da33ae244309e9c32b51c6 Mon Sep 17 00:00:00 2001 From: Balazs Tihanyi <155494815+Blaisor@users.noreply.github.com> Date: Sun, 4 Aug 2024 15:48:01 +0200 Subject: [PATCH 1/2] Added support for TryReadAsync() with CancellationToken --- .../LogEventReader.cs | 21 +++++++++++++++++++ .../LogEventReaderTests.cs | 6 ++++++ 2 files changed, 27 insertions(+) diff --git a/src/Serilog.Formatting.Compact.Reader/LogEventReader.cs b/src/Serilog.Formatting.Compact.Reader/LogEventReader.cs index a16f34e..24bdf92 100644 --- a/src/Serilog.Formatting.Compact.Reader/LogEventReader.cs +++ b/src/Serilog.Formatting.Compact.Reader/LogEventReader.cs @@ -102,6 +102,27 @@ public bool TryRead([NotNullWhen(true)] out LogEvent? evt) return ParseLine(line); } +#if NET7_0_OR_GREATER + /// + /// The token to monitor for cancellation requests. + public async Task TryReadAsync(CancellationToken cancellationToken) + { + var line = await _text.ReadLineAsync(cancellationToken).ConfigureAwait(false); + _lineNumber++; + while (string.IsNullOrWhiteSpace(line)) + { + if (line == null) + { + return null; + } + line = await _text.ReadLineAsync(cancellationToken).ConfigureAwait(false); + _lineNumber++; + } + + return ParseLine(line); + } +#endif + /// /// Read a single log event from a JSON-encoded document. /// diff --git a/test/Serilog.Formatting.Compact.Reader.Tests/LogEventReaderTests.cs b/test/Serilog.Formatting.Compact.Reader.Tests/LogEventReaderTests.cs index 70965a2..4c36b5c 100644 --- a/test/Serilog.Formatting.Compact.Reader.Tests/LogEventReaderTests.cs +++ b/test/Serilog.Formatting.Compact.Reader.Tests/LogEventReaderTests.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Threading; using System.Threading.Tasks; using Xunit; @@ -157,6 +158,11 @@ public async Task InvalidDataThrowsInvalidDataException(string document) using var asyncReader = new LogEventReader(new StringReader(document)); await Assert.ThrowsAsync(asyncReader.TryReadAsync); +#if NET7_0_OR_GREATER + using var asyncReader2 = new LogEventReader(new StringReader(document)); + await Assert.ThrowsAsync(async () => await asyncReader2.TryReadAsync(CancellationToken.None)); +#endif + Assert.Throws(() => LogEventReader.ReadFromString(document)); } } \ No newline at end of file From 4b1170ebafc0cd237939eef0db5868db23112ed9 Mon Sep 17 00:00:00 2001 From: Balazs Tihanyi <155494815+Blaisor@users.noreply.github.com> Date: Mon, 5 Aug 2024 08:35:35 +0200 Subject: [PATCH 2/2] Added feature flag constant in project file --- src/Serilog.Formatting.Compact.Reader/LogEventReader.cs | 2 +- .../Serilog.Formatting.Compact.Reader.csproj | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Serilog.Formatting.Compact.Reader/LogEventReader.cs b/src/Serilog.Formatting.Compact.Reader/LogEventReader.cs index 24bdf92..5f3be60 100644 --- a/src/Serilog.Formatting.Compact.Reader/LogEventReader.cs +++ b/src/Serilog.Formatting.Compact.Reader/LogEventReader.cs @@ -102,7 +102,7 @@ public bool TryRead([NotNullWhen(true)] out LogEvent? evt) return ParseLine(line); } -#if NET7_0_OR_GREATER +#if FEATURE_READ_LINE_ASYNC_CANCELLATION /// /// The token to monitor for cancellation requests. public async Task TryReadAsync(CancellationToken cancellationToken) diff --git a/src/Serilog.Formatting.Compact.Reader/Serilog.Formatting.Compact.Reader.csproj b/src/Serilog.Formatting.Compact.Reader/Serilog.Formatting.Compact.Reader.csproj index 648ede9..fd772a2 100644 --- a/src/Serilog.Formatting.Compact.Reader/Serilog.Formatting.Compact.Reader.csproj +++ b/src/Serilog.Formatting.Compact.Reader/Serilog.Formatting.Compact.Reader.csproj @@ -28,6 +28,10 @@ enable + + $(DefineConstants);FEATURE_READ_LINE_ASYNC_CANCELLATION + +