using System; using System.Threading; using System.Threading.Tasks; namespace PCL.Core.Utils.Threading; // Partly generated by o4-mini-high (20250709) /// /// 可限制并发线程数量的任务池。 /// public class LimitedTaskPool { /// /// 最大并发线程数。 /// public int MaxThread { get; } private readonly TaskFactory _factory; private readonly CancellationTokenSource _cts = new(); /// /// 初始化 实例 /// /// 参考 ,最小为 1 /// 小于 1 public LimitedTaskPool(int maxThread) { if (maxThread < 1) throw new ArgumentOutOfRangeException(nameof(maxThread)); MaxThread = maxThread; var scheduler = new LimitedConcurrencyLevelTaskScheduler(maxThread); var cancellationToken = _cts.Token; _factory = new TaskFactory( cancellationToken, TaskCreationOptions.DenyChildAttach, TaskContinuationOptions.None, scheduler); } /// /// 提交一个任务。 /// public Task Submit(Action work) => _factory.StartNew(work); /// /// 提交一个异步任务。 /// public Task Submit(Func work) => _factory.StartNew(work).Unwrap(); /// /// 取消所有任务。 /// public void CancelAll() => _cts.Cancel(); }