Я недавно начал использовать Quartz.NET, и до сих пор это было действительно полезно.Теперь я пытаюсь использовать его для создания задания, которое выполняется один раз в месяц с использованием NthIncludedDayTrigger (я хочу использовать NthIncludedDayTrigger, поскольку в конечном итоге я буду указывать календарь для исключения выходных / праздничных дней).
ДляПознакомившись с кодом, я настроил простое консольное приложение для создания NthIncludedDayTrigger, где первое время срабатывания будет через 15 секунд:
static void Main(string[] args)
{
IScheduler scheduler = StdSchedulerFactory.DefaultScheduler;
scheduler.Start();
var jobDetail = new JobDetail("Job name", "Group name", typeof(SomeIJobImplementation));
var trigger = new NthIncludedDayTrigger();
trigger.Name = "Trigger name";
trigger.MisfireInstruction = MisfireInstruction.NthIncludedDayTrigger.DoNothing;
trigger.IntervalType = NthIncludedDayTrigger.IntervalTypeMonthly;
//I'm using the following while experimenting with the code (AddHour(1) to account for BST):
trigger.FireAtTime = DateTime.UtcNow.AddHours(1).AddSeconds(15).ToString("HH:mm:ss");
//I'm using the following while experimenting with the code:
trigger.N = DateTime.Today.Day;
Console.WriteLine("Started, press any key to stop ...");
Console.ReadKey();
scheduler.Shutdown(false);
}
...
public class SomeIJobImplementation : IJob
{
public void Execute(JobExecutionContext context)
{
Logger.Write(String.Format(
"Job executed called at {0}",
DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss")), null, 1,
TraceEventType.Information);
}
}
Запуск этого приводит к тому, что задание выполняется несколько раз(примерно раз в секунду) в течение одной минуты.Я использую хранилище заданий ADO.NET и могу видеть в своей базе данных, что для QRTZ_TRIGGERS.NEXT_FIRE_TIME задано время последнего выполнения, т. Е., Похоже, не запланировано повторное выполнение.
Я ожидал, что приведенный выше код запустит задание один раз (примерно через 15 секунд), а затем запланирует повторное выполнение задания через месяц.
Возможно, проблема заключается в том, как яя использую Quartz.NET, пока я экспериментирую, или, может быть, мои ожидания ошибочны?В любом случае, я был бы очень признателен за любую помощь / предложения, чтобы объяснить поведение, которое я наблюдал, и что мне нужно изменить, чтобы получить поведение, которое я хочу.