using System.Collections.Concurrent;
namespace SHH.MjpegPlayer;
///
/// 任务状态信息载荷
///
public record TaskMetadata(string Name, string Type, DateTime StartTime);
///
/// 任务管理器:替代原 CoreTaskRun 功能
/// 职责:记录运行中的异步任务,支持状态检索和统一取消
///
public static class TaskManager
{
// 存储运行中的任务及其元数据
public static readonly ConcurrentDictionary RunningTasks = new();
// 存储取消令牌,用于停止特定任务
private static readonly ConcurrentDictionary _tokens = new();
///
/// 注册并运行一个受控任务
///
public static void Run(string taskName, string taskType, Func action)
{
var cts = new CancellationTokenSource();
_tokens[taskName] = cts;
var metadata = new TaskMetadata(taskName, taskType, DateTime.Now);
RunningTasks[taskName] = metadata;
// 启动异步任务
Task.Run(async () =>
{
try
{
await action(cts.Token);
}
finally
{
// Optimized: 任务结束(无论正常还是异常)必须清理资源
RunningTasks.TryRemove(taskName, out _);
_tokens.TryRemove(taskName, out _);
}
}, cts.Token);
}
}