using System; using System.Collections.Concurrent; namespace TEngine { /// /// 线程安全的静态通用对象池 /// /// public static class ConcurrentPool { private static readonly ConcurrentQueue PoolQueue = new ConcurrentQueue(); public static int Count => PoolQueue.Count; public static T Rent() { return PoolQueue.TryDequeue(out var t) ? t : Activator.CreateInstance(); } public static T Rent(Func generator) { return PoolQueue.TryDequeue(out var t) ? t : generator(); } public static void Return(T t) { if (t == null) { return; } PoolQueue.Enqueue(t); } public static void Return(T t, Action reset) { if (t == null) { return; } reset(t); PoolQueue.Enqueue(t); } } }