using AutoScan.Options; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Quartz; namespace AutoScan; public class AutoScanApp { private readonly AutoScanOptions _options; private readonly ILogger _logger; private readonly IScheduler _scheduler; public AutoScanApp(IOptions options, ILogger logger, IScheduler scheduler) { _options = options.Value; _logger = logger; _scheduler = scheduler; } public async Task Run(CancellationToken cancellationToken) { _logger.LogInformation("AutoScanApp is running..."); var at = DateTime.Now.AddMinutes(1).ToString("HH:mm"); var cron = CronFromAt(at); _logger.LogInformation("Waiting for next scan at {At} [{cron}].", at, cron); await _scheduler.Start(cancellationToken); _logger.LogInformation("Scheduler started successfully!"); // define the job and tie it to our HelloJob class IJobDetail job = JobBuilder.Create() .WithIdentity("job1", "group1") .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .WithCronSchedule(cron) .Build(); await _scheduler.ScheduleJob(job, trigger, cancellationToken); _logger.LogInformation("Scheduled job successfully!"); } private string CronFromAt(string at) { var parts = at.Split(':'); return $"0 {parts[1]} {parts[0]} * * ?"; } }