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