Нужна помощь и совет при работе с Quartz.NET NthIncludedDayTrigger - PullRequest
1 голос
/ 08 сентября 2010

Я недавно начал использовать 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, пока я экспериментирую, или, может быть, мои ожидания ошибочны?В любом случае, я был бы очень признателен за любую помощь / предложения, чтобы объяснить поведение, которое я наблюдал, и что мне нужно изменить, чтобы получить поведение, которое я хочу.

1 Ответ

1 голос
/ 15 марта 2011

Я должен опоздать, но я пытался реализовать то же решение и оказался здесь. Я считаю, что вы должны включить планировщик после того, как вы определили задания и триггеры.

...