From 6942779303aa80b98086bb9a10c5c5c34829aec9 Mon Sep 17 00:00:00 2001 From: yeziuku Date: Sun, 5 Apr 2026 22:14:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=20ConcurrentQueue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Api/Utility/ConcurrentQueue.cs | 44 ++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/Api/Utility/ConcurrentQueue.cs b/Api/Utility/ConcurrentQueue.cs index 883ed74..003222e 100644 --- a/Api/Utility/ConcurrentQueue.cs +++ b/Api/Utility/ConcurrentQueue.cs @@ -1,33 +1,35 @@ -namespace Milimoe.FunGame.Core.Api.Utility +using System.Collections; + +namespace Milimoe.FunGame.Core.Api.Utility { - public class ConcurrentQueue + public class ConcurrentQueue : IEnumerable { - private bool Lock { get; set; } + private System.Collections.Concurrent.ConcurrentQueue Instance { get; } = []; - private System.Collections.Concurrent.ConcurrentQueue Instance { get; } = new(); + public bool IsEmpty => Instance.IsEmpty; - public async void AddAsync(T obj) + public int Count => Instance.Count; + + public void Clear() => Instance.Clear(); + + public void Add(T obj) { - if (Lock) - { - await Task.Run(() => - { - while (true) - { - if (!Lock) break; - Thread.Sleep(100); - } - }); - } - Lock = true; Instance.Enqueue(obj); } - public bool Delete() + public bool GetFirst(out T? obj) { - bool result = Instance.TryDequeue(out _); - Lock = false; - return result; + return Instance.TryDequeue(out obj); + } + + public IEnumerator GetEnumerator() + { + return Instance.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); } } }