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();
}
}
}