| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- using System.Collections.Concurrent;
- namespace SKMC.Api.Common.Tasks
- {
- /// <summary>
- /// TaskToken(任务执行控制令牌)容器
- /// 用于管理多个TaskToken相关的线程执行暂停、恢复、停止
- /// </summary>
- public class TaskTokener
- {
- private static readonly ConcurrentDictionary<int, TaskToken> taskTokens = new ConcurrentDictionary<int, TaskToken>();
- /// <summary>
- /// 创建一个TaskToken
- /// </summary>
- /// <param name="id">TaskToken的Id</param>
- public static TaskToken Add(int id)
- {
- if (taskTokens.ContainsKey(id))
- {
- taskTokens.TryRemove(id, out var taskTokenGet);
- taskTokenGet?.Cancel();
- };
- TaskToken taskTokenNew = new TaskToken { Id = id };
- bool result = taskTokens.TryAdd(id, taskTokenNew);
- if (result) return taskTokenNew;
- return null;
- }
- /// <summary>
- /// 重新创建所有的TaskToken
- /// </summary>
- public static void AddAll()
- {
- foreach (int stationId in taskTokens.Keys)
- {
- TaskToken taskToken = GetTaskToken(stationId);
- if (taskToken == null) continue;
- Add(stationId);
- }
- }
- /// <summary>
- /// 根据Id获取TaskToken
- /// </summary>
- /// <param name="id">TaskToken的Id</param>
- /// <returns></returns>
- public static TaskToken GetTaskToken(int id)
- {
- if (!taskTokens.ContainsKey(id))
- {
- Add(id);
- }
- return taskTokens[id];
- }
- /// <summary>
- /// 设置TaskToken中断点(在Stop之前有效)
- /// </summary>
- /// <param name="id"></param>
- public static void SetWaitPoint(int id) => SetWaitPoint(GetTaskToken(id));
- /// <summary>
- /// 设置TaskToken中断点(在Stop之前有效)
- /// </summary>
- /// <param name="taskToken"></param>
- public static void SetWaitPoint(TaskToken taskToken)
- {
- if (taskToken == null) return;
- taskToken.SetWaitPoint();
- }
- /// <summary>
- /// TaskToken是否已取消/停止
- /// </summary>
- /// <param name="id"></param>
- /// <returns></returns>
- public static bool IsCancelled(int id) => IsCancelled(GetTaskToken(id));
- /// <summary>
- /// TaskToken是否已取消/停止
- /// </summary>
- /// <param name="taskToken"></param>
- /// <returns></returns>
- public static bool IsCancelled(TaskToken taskToken)
- {
- if (taskToken == null) return true;
- return taskToken.IsCancelled();
- }
- /// <summary>
- /// 暂停TaskToken
- /// </summary>
- /// <param name="id"></param>
- public static void Pause(int id) => Pause(GetTaskToken(id));
- /// <summary>
- /// 暂停TaskToken
- /// </summary>
- /// <param name="taskToken"></param>
- public static void Pause(TaskToken taskToken)
- {
- if (taskToken == null) return;
- taskToken.Pause();
- }
- /// <summary>
- /// 暂停所有的TaskToken
- /// </summary>
- public static void PauseAll()
- {
- foreach (int stationId in taskTokens.Keys)
- {
- Pause(stationId);
- }
- }
- /// <summary>
- /// 恢复TaskToken
- /// </summary>
- /// <param name="id"></param>
- public static void Resume(int id) => Resume(GetTaskToken(id));
- /// <summary>
- /// 恢复TaskToken
- /// </summary>
- /// <param name="taskToken"></param>
- public static void Resume(TaskToken taskToken)
- {
- if (taskToken == null) return;
- taskToken.Resume();
- }
- /// <summary>
- /// 恢复所有的TaskToken
- /// </summary>
- public static void ResumeAll()
- {
- foreach (int station in taskTokens.Keys)
- {
- Resume(station);
- }
- }
- /// <summary>
- /// 停止TaskToken
- /// </summary>
- /// <param name="id"></param>
- public static void Stop(int id) => Stop(GetTaskToken(id));
- /// <summary>
- /// 停止TaskToken
- /// </summary>
- /// <param name="taskToken"></param>
- public static void Stop(TaskToken taskToken)
- {
- if (taskToken == null) return;
- taskToken.Stop();
- //taskTokens.TryRemove(taskToken.Id, out _);
- }
- /// <summary>
- /// 停止所有的TaskToken
- /// </summary>
- public static void StopAll()
- {
- foreach (int stationId in taskTokens.Keys)
- {
- Stop(stationId);
- }
- }
- }
- }
|