TaskSupport.cs 3.0 KB

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