| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- using System.Collections.Concurrent;
- namespace SKMC.Api.Common.Tasks
- {
- public class TaskTokener
- {
- private static readonly ConcurrentDictionary<int, TaskToken> taskTokens = new ConcurrentDictionary<int, TaskToken>();
- public static void Add(int id)
- {
- if (taskTokens.ContainsKey(id))
- {
- taskTokens.TryRemove(id, out var taskToken);
- taskToken?.TokenSource.Cancel();
- };
- taskTokens.TryAdd(id, new TaskToken());
- }
- public static TaskToken GetTaskToken(int id)
- {
- if (!taskTokens.ContainsKey(id))
- {
- Add(id);
- }
- return taskTokens[id];
- }
- public static void SetWaitPoint(int id)
- {
- TaskToken taskToken = GetTaskToken(id);
- if (taskToken == null) return;
- taskToken.SetWaitPoint();
- }
- public static bool IsCancelled(int id)
- {
- TaskToken taskToken = GetTaskToken(id);
- if (taskToken == null) return true;
- bool result = taskToken.TokenSource.IsCancellationRequested;
- return result;
- }
- public static void Pause(int id)
- {
- TaskToken taskToken = GetTaskToken(id);
- if (taskToken == null) return;
- taskToken.ResetEvent.Reset();
- }
- public static void PauseAll()
- {
- foreach (int stationId in taskTokens.Keys)
- {
- Pause(stationId);
- }
- }
- public static void Resume(int id)
- {
- TaskToken taskToken = GetTaskToken(id);
- if (taskToken == null) return;
- taskToken.ResetEvent.Set();
- }
- public static void ResumeAll()
- {
- foreach (int station in taskTokens.Keys)
- {
- Resume(station);
- }
- }
- public static void Stop(int id)
- {
- TaskToken taskToken = GetTaskToken(id);
- if (taskToken == null) return;
- taskToken.TokenSource.Cancel();
- taskToken.ResetEvent.Set();
- }
- public static void StopAll()
- {
- foreach (int stationId in taskTokens.Keys)
- {
- Stop(stationId);
- }
- }
- public static void RestoreAll()
- {
- foreach (int stationId in taskTokens.Keys)
- {
- TaskToken taskToken = GetTaskToken(stationId);
- if (taskToken == null) continue;
- Add(stationId);
- }
- }
- }
- }
|