Планирование Заданий Cron С Quartz.NET
Я пытаюсь запланировать некоторые задания, используя Quartz.NET но я не могу заставить его работать. Я попробовал следующий код, но ничего не произошло, когда указанное время было выполнено.
public void Test()
{
ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
IScheduler scheduler = schedulerFactory.GetScheduler();
IJobDetail jobDetail = JobBuilder.Create<SatellitePaymentGenerationJob>()
.WithIdentity("TestJob")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.ForJob(jobDetail)
.WithCronSchedule("0 26 18 * * ?")
.WithIdentity("TestTrigger")
.StartNow()
.Build();
scheduler.ScheduleJob(jobDetail, trigger);
scheduler.Start();
}
Обновление:
Я также попытался сделать следующее, чтобы убедиться, что проблема не в выражении Cron. У меня тоже не получилось...
IJobDetail jobDetail = JobBuilder.Create<SatellitePaymentGenerationJob>()
.WithIdentity("TestJob", "TestGroup")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.ForJob(jobDetail)
.WithSimpleSchedule(x=> x.RepeatForever().WithIntervalInSeconds(10).WithMisfireHandlingInstructionFireNow())
.StartAt(new DateTimeOffset(DateTime.UtcNow.AddSeconds(10)))
.WithIdentity("TestTrigger", "TestGroup")
.Build();
scheduler.ScheduleJob(jobDetail, trigger);
scheduler.Start();
Console.WriteLine(DateTime.UtcNow.ToLongTimeString());
Console.WriteLine(trigger.GetNextFireTimeUtc());
Обратите внимание, что trigger.GetNextFireTimeUtc()
возвращает допустимое значение времени, но задание никогда не запускается.
Где я ошибся?
1 ответ:
С вашим образцом кода все в порядке, возможно, метод Execute из реализации SatellitePaymentGenerationJob неверен, или задание выполнено, но не в ожидаемое время. В нынешнем виде он будет стрелять в 18:26 каждый день, это то, что вы хотите?
Сравните с моим кодом (рабочим):
class Program { static void Main(string[] args) { Test(); } public static void Test() { ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); IScheduler scheduler = schedulerFactory.GetScheduler(); IJobDetail jobDetail = JobBuilder.Create<SatellitePaymentGenerationJob>() .WithIdentity("TestJob") .Build(); ITrigger trigger = TriggerBuilder.Create() .ForJob(jobDetail) .WithCronSchedule("0 45 20 * * ?") .WithIdentity("TestTrigger") .StartNow() .Build(); scheduler.ScheduleJob(jobDetail, trigger); scheduler.Start(); } } internal class SatellitePaymentGenerationJob : IJob { public void Execute(IJobExecutionContext context) { Console.WriteLine("test"); } }