From a9ec1878d0b49360d4c4d9419d364afdc61b5ac9 Mon Sep 17 00:00:00 2001 From: Tal Aloni Date: Thu, 1 May 2025 21:37:48 +0300 Subject: [PATCH] Utilities: BlockingQueue.TryDequeue: Change behavior to return all items enqueued before Stop was invoked --- Utilities/Generics/BlockingQueue.cs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/Utilities/Generics/BlockingQueue.cs b/Utilities/Generics/BlockingQueue.cs index 8007d8d..fffd1e4 100644 --- a/Utilities/Generics/BlockingQueue.cs +++ b/Utilities/Generics/BlockingQueue.cs @@ -17,6 +17,11 @@ namespace Utilities public void Enqueue(T item) { + if (m_stopping) + { + return; + } + lock (m_queue) { m_queue.Enqueue(item); @@ -30,10 +35,11 @@ namespace Utilities public void Enqueue(List items) { - if (items.Count == 0) + if (m_stopping || items.Count == 0) { return; } + lock (m_queue) { foreach (T item in items) @@ -60,7 +66,7 @@ namespace Utilities Monitor.Wait(m_queue); } - if (m_stopping) + if (m_stopping && m_queue.Count == 0) { item = default(T); return false; @@ -82,6 +88,15 @@ namespace Utilities } } + public void Abort() + { + lock (m_queue) + { + m_queue.Clear(); + Stop(); + } + } + public int Count { get