Update
This commit is contained in:
@@ -3,14 +3,17 @@ using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace ConsoleApp2.Services;
|
||||
|
||||
/// <summary>
|
||||
/// 快速批量创建和等待任务
|
||||
/// </summary>
|
||||
public class TaskManager
|
||||
{
|
||||
private readonly ConcurrentBag<Task> _tasks;
|
||||
private readonly ILogger _logger;
|
||||
|
||||
public int TaskCount => _tasks.Count;
|
||||
public int RunningTaskCount => _tasks.Count(task => !task.IsCompleted);
|
||||
public IReadOnlyCollection<Task> Tasks => _tasks;
|
||||
public bool MainTaskCompleted { get; set; }
|
||||
|
||||
public TaskManager(ILogger<TaskManager> logger)
|
||||
{
|
||||
@@ -18,11 +21,22 @@ public class TaskManager
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public Task<TResult> CreateTask<TResult>(Func<TResult> func)
|
||||
public void CreateTask<TResult>(Func<TResult> func, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var task = Task.Factory.StartNew(func);
|
||||
var task = Task.Factory.StartNew(func, cancellationToken);
|
||||
_tasks.Add(task);
|
||||
_logger.LogDebug("New task created.");
|
||||
return task;
|
||||
_logger.LogDebug("New task created");
|
||||
}
|
||||
|
||||
public async Task WaitAll()
|
||||
{
|
||||
await Task.WhenAll(_tasks);
|
||||
}
|
||||
|
||||
public void ClearTask()
|
||||
{
|
||||
if(RunningTaskCount != 0)
|
||||
throw new InvalidOperationException("Unable to clear task. There are still running tasks");
|
||||
_tasks.Clear();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user