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.
57 lines
1.6 KiB
C#
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 _);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|