diff --git a/build/Version.props b/build/Version.props
index acae893..726b569 100644
--- a/build/Version.props
+++ b/build/Version.props
@@ -1,5 +1,5 @@
- 5.2.1
+ 5.3.0
\ No newline at end of file
diff --git a/src/Utils/Walterlv.Collections/Threading/AsyncQueue.cs b/src/Utils/Walterlv.Collections/Threading/AsyncQueue.cs
index ae5673c..2e3ef24 100644
--- a/src/Utils/Walterlv.Collections/Threading/AsyncQueue.cs
+++ b/src/Utils/Walterlv.Collections/Threading/AsyncQueue.cs
@@ -23,6 +23,12 @@ public AsyncQueue()
_queue = new ConcurrentQueue();
}
+ ///
+ /// 获取此刻队列中剩余元素的个数。
+ /// 请注意:因为线程安全问题,此值获取后值即过时,所以获取此值的代码需要自行处理线程安全。
+ ///
+ public int Count => _queue.Count;
+
///
/// 入队。
///
diff --git a/src/Utils/Walterlv.Logger/Core/AsyncOutputLogger.AsyncQueue.cs b/src/Utils/Walterlv.Logger/Core/AsyncOutputLogger.AsyncQueue.cs
index 264c857..f643680 100644
--- a/src/Utils/Walterlv.Logger/Core/AsyncOutputLogger.AsyncQueue.cs
+++ b/src/Utils/Walterlv.Logger/Core/AsyncOutputLogger.AsyncQueue.cs
@@ -18,6 +18,8 @@ public AsyncQueue()
_queue = new ConcurrentQueue();
}
+ public int Count => _queue.Count;
+
public void Enqueue(T item)
{
_queue.Enqueue(item);
@@ -40,7 +42,6 @@ public async Task DequeueAsync(CancellationToken cancellationToken = default)
while (true)
{
await _semaphoreSlim.WaitAsync(cancellationToken).ConfigureAwait(false);
-
if (_queue.TryDequeue(out var item))
{
return item;
diff --git a/src/Utils/Walterlv.Logger/Core/AsyncOutputLogger.cs b/src/Utils/Walterlv.Logger/Core/AsyncOutputLogger.cs
index 893edbd..2b17a69 100644
--- a/src/Utils/Walterlv.Logger/Core/AsyncOutputLogger.cs
+++ b/src/Utils/Walterlv.Logger/Core/AsyncOutputLogger.cs
@@ -1,5 +1,6 @@
using System;
using System.Runtime.CompilerServices;
+using System.Threading;
using System.Threading.Tasks;
namespace Walterlv.Logging.Core
@@ -11,6 +12,9 @@ public abstract partial class AsyncOutputLogger : ILogger
{
private readonly AsyncQueue _queue;
private bool _isInitialized;
+ private CancellationTokenSource _waitForEmptyCancellationTokenSource = new CancellationTokenSource();
+ private TaskCompletionSource