You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kev/Drawer/SmartNest/SmartWells/CalculationTaskManager.cs

57 lines
1.6 KiB
C#

using System.Collections.Concurrent;
namespace SmartWells
{
/// <summary>
/// 计算任务管理器
/// </summary>
public static class CalculationTaskManager
{
private static readonly ConcurrentDictionary<string, CaculateHelpWeb> _tasks = new ConcurrentDictionary<string, CaculateHelpWeb>();
/// <summary>
/// 添加计算任务
/// </summary>
/// <param name="taskId">任务ID</param>
/// <param name="calculator">计算实例</param>
public static void AddTask(string taskId, CaculateHelpWeb calculator)
{
_tasks.TryAdd(taskId, calculator);
}
/// <summary>
/// 获取计算任务
/// </summary>
/// <param name="taskId">任务ID</param>
/// <returns>计算实例</returns>
public static CaculateHelpWeb GetTask(string taskId)
{
_tasks.TryGetValue(taskId, out var calculator);
return calculator;
}
/// <summary>
/// 移除计算任务
/// </summary>
/// <param name="taskId">任务ID</param>
public static void RemoveTask(string taskId)
{
_tasks.TryRemove(taskId, out _);
}
/// <summary>
/// 清理完成或过期的任务
/// </summary>
public static void CleanupTasks()
{
foreach (var task in _tasks)
{
if (task.Value.Status == CaculateStatus.Stopped || task.Value.IsStop)
{
_tasks.TryRemove(task.Key, out _);
}
}
}
}
}