QuartzUtil.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using Microsoft.Extensions.DependencyInjection;
  2. using Quartz;
  3. using Quartz.Impl;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Threading.Tasks;
  8. namespace wispro.sp.api.Job
  9. {
  10. public class QuartzUtil
  11. {
  12. private static ISchedulerFactory _schedulerFactory;
  13. private static IScheduler _scheduler;
  14. /// <summary>
  15. /// 添加任务
  16. /// </summary>
  17. /// <param name="type">类</param>
  18. /// <param name="jobKey">键</param>
  19. /// <param name="trigger">触发器</param>
  20. public static async Task Add(Type type, JobKey jobKey, ITrigger trigger = null)
  21. {
  22. Init();
  23. _scheduler = await _schedulerFactory.GetScheduler();
  24. await _scheduler.Start();
  25. if (trigger == null)
  26. {
  27. trigger = TriggerBuilder.Create()
  28. .WithIdentity("april.trigger")
  29. .WithDescription("default")
  30. .WithSimpleSchedule(x => x.WithMisfireHandlingInstructionFireNow().WithRepeatCount(-1))
  31. .Build();
  32. }
  33. var job = JobBuilder.Create(type)
  34. .WithIdentity(jobKey)
  35. .Build();
  36. await _scheduler.ScheduleJob(job, trigger);
  37. }
  38. /// <summary>
  39. /// 恢复任务
  40. /// </summary>
  41. /// <param name="jobKey">键</param>
  42. public static async Task Resume(JobKey jobKey)
  43. {
  44. Init();
  45. _scheduler = await _schedulerFactory.GetScheduler();
  46. //LogUtil.Debug($"恢复任务{jobKey.Group},{jobKey.Name}");
  47. await _scheduler.ResumeJob(jobKey);
  48. }
  49. /// <summary>
  50. /// 停止任务
  51. /// </summary>
  52. /// <param name="jobKey">键</param>
  53. public static async Task Stop(JobKey jobKey)
  54. {
  55. Init();
  56. _scheduler = await _schedulerFactory.GetScheduler();
  57. //LogUtil.Debug($"暂停任务{jobKey.Group},{jobKey.Name}");
  58. await _scheduler.PauseJob(jobKey);
  59. }
  60. /// <summary>
  61. /// 初始化
  62. /// </summary>
  63. private static void Init()
  64. {
  65. if (_schedulerFactory == null)
  66. {
  67. _schedulerFactory = new StdSchedulerFactory();// ServiceLocator.Services.GetService<ISchedulerFactory>();
  68. }
  69. }
  70. }
  71. }