using Serilog;
using ApplicationException = System.ApplicationException;
using TaskExtensions = MesETL.Shared.Helper.TaskExtensions;
namespace MesETL.App.Services;
///
/// 快速批量创建和等待任务
///
public class TaskManager
{
private int _runningTaskCount;
public int RunningTaskCount => _runningTaskCount;
public int MaxTaskCount { get; }
public event Action? OnException;
public event Action? OnTaskCompleteSuccessfully;
public TaskManager(int maxTaskCount)
{
MaxTaskCount = maxTaskCount;
}
public async ValueTask CreateTaskAsync(Func func, CancellationToken cancellationToken = default)
{
await TaskExtensions.WaitUntil(() => _runningTaskCount < MaxTaskCount, 25, cancellationToken);
return RunTask(func, cancellationToken);
}
public async ValueTask CreateTaskAsync(Func