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
+
+