TaskServiceDaddy.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7. namespace Y.Utils.TaskServiceUtils
  8. {
  9. public abstract class TaskServiceDaddy
  10. {
  11. private DateTime StartTime, LastRunTime;
  12. /// <summary>
  13. /// 通过运行时间判断是否运行
  14. /// </summary>
  15. public bool IsRun
  16. {
  17. get
  18. {
  19. if (LastRunTime.AddSeconds(Interval + 1000) > DateTime.Now)
  20. return true;
  21. return false;
  22. }
  23. }
  24. /// <summary>
  25. /// 已启动
  26. /// </summary>
  27. public bool IsStart { get { return _IsStart; } }
  28. /// <summary>
  29. /// 已启动(Protect)
  30. /// </summary>
  31. protected bool _IsStart = false;
  32. /// <summary>
  33. /// 取消标志
  34. /// </summary>
  35. protected CancellationTokenSource CT = new CancellationTokenSource();
  36. /// <summary>
  37. /// 任务循环间隔
  38. /// </summary>
  39. protected int Interval = 1000;
  40. private bool IsDestroy = false;
  41. /// <summary>
  42. /// 设置任务间隔(0为不循环任务)
  43. /// </summary>
  44. /// <param name="i"></param>
  45. /// <returns></returns>
  46. public int SetInterval(int i)
  47. {
  48. Interval = i;
  49. return Interval;
  50. }
  51. /// <summary>
  52. /// 启动服务任务
  53. /// </summary>
  54. public virtual void Start()
  55. {
  56. StartTime = DateTime.Now;
  57. if (!IsDestroy)
  58. Task.Factory.StartNew(() =>
  59. {
  60. if (!IsStart)
  61. {
  62. _IsStart = true;
  63. BeforeTODO();
  64. do
  65. {
  66. LastRunTime = DateTime.Now;
  67. TODO();
  68. Thread.Sleep(Interval);
  69. } while (!CT.IsCancellationRequested && Interval > 0);
  70. AfterTODO();
  71. }
  72. });
  73. }
  74. /// <summary>
  75. /// 提前干点啥
  76. /// </summary>
  77. public virtual void BeforeTODO() { }
  78. /// <summary>
  79. /// 干点啥
  80. /// </summary>
  81. public abstract void TODO();
  82. /// <summary>
  83. /// 完事儿干点啥
  84. /// </summary>
  85. public virtual void AfterTODO() { }
  86. /// <summary>
  87. /// 停止服务任务
  88. /// </summary>
  89. public virtual void Stop()
  90. {
  91. CT.Cancel();
  92. IsDestroy = true;
  93. }
  94. }
  95. }