TaskToken.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System.Threading;
  2. namespace SKMC.Api.Common.Tasks
  3. {
  4. /// <summary>
  5. /// 任务执行控制令牌,用于控制线程/工站任务的执行状态
  6. /// 主要包含三种控制能力:
  7. /// 1. 暂停 / 恢复(Pause / Resume)
  8. /// 2. 取消执行(Cancel / Stop)
  9. /// 3. 等待执行许可(SetWaitPoint)
  10. /// 注意:
  11. /// - Pause / Resume 属于可重复状态控制
  12. /// - Cancel / Stop 为一次性终止操作,调用后不可恢复
  13. /// </summary>
  14. public class TaskToken
  15. {
  16. public int Id { get; set; }
  17. public CancellationTokenSource TokenSource { get; set; } = new CancellationTokenSource();
  18. public ManualResetEvent ResetEvent { get; set; } = new ManualResetEvent(true);
  19. /// <summary>
  20. /// 添加中断点
  21. /// </summary>
  22. public void SetWaitPoint()
  23. {
  24. ResetEvent.WaitOne();
  25. }
  26. /// <summary>
  27. /// 取消
  28. /// </summary>
  29. public void Cancel()
  30. {
  31. TokenSource.Cancel();
  32. }
  33. /// <summary>
  34. /// 是否取消
  35. /// </summary>
  36. /// <returns></returns>
  37. public bool IsCancelled()
  38. {
  39. return TokenSource.IsCancellationRequested;
  40. }
  41. /// <summary>
  42. /// 暂停
  43. /// </summary>
  44. public void Pause()
  45. {
  46. ResetEvent.Reset();
  47. }
  48. /// <summary>
  49. /// 恢复
  50. /// </summary>
  51. public void Resume()
  52. {
  53. ResetEvent.Set();
  54. }
  55. /// <summary>
  56. /// 停止
  57. /// </summary>
  58. public void Stop()
  59. {
  60. Cancel();
  61. Resume();
  62. }
  63. }
  64. }