mirror of
https://github.com/project-redbud/FunGame-Core.git
synced 2026-04-20 05:24:59 +00:00
完善 ConcurrentQueue
This commit is contained in:
parent
47fb717651
commit
6942779303
@ -1,33 +1,35 @@
|
|||||||
namespace Milimoe.FunGame.Core.Api.Utility
|
using System.Collections;
|
||||||
|
|
||||||
|
namespace Milimoe.FunGame.Core.Api.Utility
|
||||||
{
|
{
|
||||||
public class ConcurrentQueue<T>
|
public class ConcurrentQueue<T> : IEnumerable<T>
|
||||||
{
|
{
|
||||||
private bool Lock { get; set; }
|
private System.Collections.Concurrent.ConcurrentQueue<T> Instance { get; } = [];
|
||||||
|
|
||||||
private System.Collections.Concurrent.ConcurrentQueue<T> 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);
|
Instance.Enqueue(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Delete()
|
public bool GetFirst(out T? obj)
|
||||||
{
|
{
|
||||||
bool result = Instance.TryDequeue(out _);
|
return Instance.TryDequeue(out obj);
|
||||||
Lock = false;
|
}
|
||||||
return result;
|
|
||||||
|
public IEnumerator<T> GetEnumerator()
|
||||||
|
{
|
||||||
|
return Instance.GetEnumerator();
|
||||||
|
}
|
||||||
|
|
||||||
|
IEnumerator IEnumerable.GetEnumerator()
|
||||||
|
{
|
||||||
|
return GetEnumerator();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user