QuartzHostedService.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. using System.Threading;
  2. using System.Threading.Tasks;
  3. using Microsoft.Extensions.DependencyInjection;
  4. using Microsoft.Extensions.Hosting;
  5. using Microsoft.Extensions.Logging;
  6. using Quartz;
  7. public class QuartzHostedService : IHostedService {
  8. private readonly ILogger<QuartzHostedService> _logger;
  9. private readonly IScheduler _scheduler;
  10. private readonly IServiceScopeFactory _factory;
  11. public QuartzHostedService(ILogger<QuartzHostedService> logger, IScheduler scheduler, IServiceScopeFactory factory) {
  12. _logger = logger;
  13. _scheduler = scheduler;
  14. _factory = factory;
  15. using (var scope = _factory.CreateScope()) {
  16. var provider = scope.ServiceProvider;
  17. _scheduler.JobFactory = provider.GetRequiredService(typeof(QuartzJobFactory)) as QuartzJobFactory;
  18. _scheduler.ListenerManager.AddSchedulerListener(provider.GetRequiredService(typeof(QuartzSchedulerListener)) as QuartzSchedulerListener);
  19. }
  20. }
  21. public Task StartAsync(CancellationToken cancellationToken) {
  22. return _scheduler.Start(cancellationToken);
  23. }
  24. public Task StopAsync(CancellationToken cancellationToken) {
  25. return _scheduler.Shutdown(cancellationToken);
  26. }
  27. }