TaskServiceDaddy.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. /// <summary>
  12. /// 已启动
  13. /// </summary>
  14. public bool IsStart { get { return _IsStart; } }
  15. /// <summary>
  16. /// 已启动(Protect)
  17. /// </summary>
  18. protected bool _IsStart = false;
  19. /// <summary>
  20. /// 取消标志
  21. /// </summary>
  22. protected CancellationTokenSource CT = new CancellationTokenSource();
  23. /// <summary>
  24. /// 任务循环间隔
  25. /// </summary>
  26. protected int Interval = 1000;
  27. private bool IsDestroy = false;
  28. /// <summary>
  29. /// 设置任务间隔(0为不循环任务)
  30. /// </summary>
  31. /// <param name="i"></param>
  32. /// <returns></returns>
  33. public int SetInterval(int i)
  34. {
  35. Interval = i;
  36. return Interval;
  37. }
  38. /// <summary>
  39. /// 启动服务任务
  40. /// </summary>
  41. public virtual void Start()
  42. {
  43. if (!IsDestroy)
  44. Task.Factory.StartNew(() =>
  45. {
  46. if (!IsStart)
  47. {
  48. _IsStart = true;
  49. BeforeTODO();
  50. do
  51. {
  52. TODO();
  53. Thread.Sleep(Interval);
  54. } while (!CT.IsCancellationRequested && Interval > 0);
  55. AfterTODO();
  56. }
  57. });
  58. }
  59. /// <summary>
  60. /// 提前干点啥
  61. /// </summary>
  62. public virtual void BeforeTODO() { }
  63. /// <summary>
  64. /// 干点啥
  65. /// </summary>
  66. public abstract void TODO();
  67. /// <summary>
  68. /// 完事儿干点啥
  69. /// </summary>
  70. public virtual void AfterTODO() { }
  71. /// <summary>
  72. /// 停止服务任务
  73. /// </summary>
  74. public virtual void Stop()
  75. {
  76. CT.Cancel();
  77. IsDestroy = true;
  78. }
  79. }
  80. }