using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Milimoe.FunGame.Core.Service { internal class ThreadManager { /// /// 最大接受的线程数量 /// private int MaxTask { get; } /// /// 可参与高并发的字典,但添加效率较低 /// private ConcurrentDictionary Threads { get; } = new(); /// /// Init ThreadManager /// /// MaxTask internal ThreadManager(int MaxTask = 0) { if (MaxTask <= 0) this.MaxTask = Library.Constant.General.MaxTask_General; else { this.MaxTask = MaxTask; } } /// /// 获取Task对象 /// /// Task的Key /// Task对象 internal Task this[string name] { get { return Threads[name]; } } /// /// 向线程管理器中添加Task /// /// Task的Key /// Task对象 /// True:操作成功 internal bool Add(string name, Task t) { if (Threads.Count + 1 > MaxTask) return false; return Threads.TryAdd(name, t); } /// /// 从线程管理器中移除Task /// /// Task的Key /// True:操作成功 internal bool Remove(string name) { return Threads.TryRemove(name, out _); } /// /// 将Task移除,并取得这个Task /// /// Task的Key /// Task对象 /// 被移除的Task internal bool Remove(string name, ref Task? t) { return Threads.TryRemove(name, out t); } /// /// 将Task移除,并取得这个Task /// /// Task的Key /// 被移除的Task internal Task? RemoveAndGet(string name) { Threads.TryRemove(name, out Task? result); return result; } /// /// 清空线程管理器 /// internal void Clear() { Threads.Clear(); } } }