BaseTaskTrigger.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using System;
  2. using System.Threading.Tasks;
  3. namespace MediaBrowser.Common.ScheduledTasks
  4. {
  5. /// <summary>
  6. /// Use to indicate that a scheduled task should run
  7. /// </summary>
  8. public abstract class BaseTaskTrigger : IDisposable
  9. {
  10. /// <summary>
  11. /// Fires when the trigger condition is satisfied and the task should run
  12. /// </summary>
  13. internal event EventHandler<EventArgs> Triggered;
  14. /// <summary>
  15. /// Called when [triggered].
  16. /// </summary>
  17. protected async void OnTriggered()
  18. {
  19. Stop();
  20. if (Triggered != null)
  21. {
  22. Triggered(this, EventArgs.Empty);
  23. }
  24. await Task.Delay(1000).ConfigureAwait(false);
  25. Start();
  26. }
  27. /// <summary>
  28. /// Stars waiting for the trigger action
  29. /// </summary>
  30. protected internal abstract void Start();
  31. /// <summary>
  32. /// Stops waiting for the trigger action
  33. /// </summary>
  34. protected internal abstract void Stop();
  35. /// <summary>
  36. /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
  37. /// </summary>
  38. public void Dispose()
  39. {
  40. Dispose(true);
  41. GC.SuppressFinalize(this);
  42. }
  43. /// <summary>
  44. /// Releases unmanaged and - optionally - managed resources.
  45. /// </summary>
  46. /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
  47. protected virtual void Dispose(bool dispose)
  48. {
  49. if (dispose)
  50. {
  51. Stop();
  52. }
  53. }
  54. }
  55. }