2013-02-16 167 views
2

我正在嘗試使用Quartz.NET安排一些作業,但無法使其工作。我嘗試了下面的代碼,但是在滿足指定的時間時沒有發生任何事情。使用Quartz.NET調度Cron作業

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(); 
    } 

UPDATE:

我也嘗試了以下,以確保它不是導致該問題的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()返回一個有效的時間值,但工作永遠不會被觸發。

我哪裏錯了?

回答

7

一切都可以與您的示例代碼,可能是來自SatellitePaymentGenerationJob實現的Execute方法是錯誤的,或作業執行但沒有在預期的時間。在目前的形態下,它將在每天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"); 
    } 
} 
+0

是的,這是意圖。我已經將它設置爲每天20:00(現在按照我的時區)運行,並且什麼也沒有發生。 「Execute」方法開始處的斷點未被命中。有任何想法嗎? – Kassem 2013-02-16 18:02:12

+0

您是否在應用程序中調用了Test()方法? – 2013-02-16 19:28:57

+0

當然。我在控制檯應用程序的'Main'方法中調用它。我也嘗試了一個基於間隔的觸發器(正如你可以在更新的問題中看到的那樣),但它也不起作用。 – Kassem 2013-02-16 19:42:48