Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

JobsService.cs 1.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System.Threading;
  2. using System.Threading.Tasks;
  3. using Microsoft.Extensions.Hosting;
  4. using Quartz;
  5. using Quartz.Spi;
  6. namespace SecureSharing.Quartz;
  7. public sealed class JobsService : IHostedService
  8. {
  9. private readonly IJobFactory jobFactory;
  10. private readonly JobMetadata jobMetadata;
  11. private readonly ISchedulerFactory schedulerFactory;
  12. public JobsService(ISchedulerFactory
  13. schedulerFactory,
  14. JobMetadata jobMetadata,
  15. IJobFactory jobFactory)
  16. {
  17. this.schedulerFactory = schedulerFactory;
  18. this.jobMetadata = jobMetadata;
  19. this.jobFactory = jobFactory;
  20. }
  21. public IScheduler Scheduler { get; set; }
  22. public async Task StartAsync(CancellationToken cancellationToken)
  23. {
  24. Scheduler = await schedulerFactory.GetScheduler();
  25. Scheduler.JobFactory = jobFactory;
  26. var job = CreateJob(jobMetadata);
  27. var trigger = CreateTrigger(jobMetadata);
  28. await Scheduler.ScheduleJob(job, trigger, cancellationToken);
  29. await Scheduler.Start(cancellationToken);
  30. }
  31. public async Task StopAsync(CancellationToken cancellationToken)
  32. {
  33. await Scheduler?.Shutdown(cancellationToken);
  34. }
  35. private ITrigger CreateTrigger(JobMetadata jobMetadata)
  36. {
  37. return TriggerBuilder.Create()
  38. .WithIdentity(jobMetadata.JobId.ToString())
  39. .WithCronSchedule(jobMetadata.CronExpression)
  40. .WithDescription($"{jobMetadata.JobName}")
  41. .Build();
  42. }
  43. private IJobDetail CreateJob(JobMetadata jobMetadata)
  44. {
  45. return JobBuilder
  46. .Create(jobMetadata.JobType)
  47. .WithIdentity(jobMetadata.JobId.ToString())
  48. .WithDescription($"{jobMetadata.JobName}")
  49. .Build();
  50. }
  51. }