2013-03-25 14 views
2

我想要開始使用Quartz.Net 2.0。一個非常簡單的顯示測試應用程序與SchedulerExceptionSchedulerException與簡單作業

觸發的相關作業的名稱失敗不能爲空

的代碼是從版本改編2.0 Migration Guide

ISchedulerFactory schedFact = new StdSchedulerFactory(); 
IScheduler classSched = schedFact.GetScheduler(); 
classSched.Start(); 
IJobDetail job = JobBuilder.Create<ClassificationJob>() 
        .WithIdentity("myJob", "My Group") 
        .WithDescription("My Description") 
        .Build(); 

TimeZoneInfo tzUtc = TimeZoneInfo.Utc; 
DateTime startTime; 

startTime = DateTime.UtcNow; 

ITrigger trigger = TriggerBuilder.Create() 
    .WithIdentity("myTrigger", "My Group") 
    .WithDescription("My Description") 
    .StartAt(startTime) 
    .WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever()) 
    .Build(); 

classSched.ScheduleJob(trigger); // Exception on this line 

這是爲什麼失敗?

回答

3

我覺得有兩個問題。

首先,(儘管遷移指南中的例子),我認爲你需要說哪個作業觸發有關,即調用.ForJob方法,例如

ITrigger trigger = TriggerBuilder.Create() 
    .WithIdentity("myTrigger", "My Group") 
    .WithDescription("My Description") 
    .StartAt(startTime) 
    .WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever()) 
    .ForJob(job) 
    .Build(); 

其次,用於調度作業的語法僅適用於先前已添加作業的情況(例如,如果以前稱爲classSched.AddJob(job,true); //或classSched.AddJob(job,false);

如果那還沒有完成,那麼你需要使用語法

classSched.ScheduleJob(job, trigger); 
+0

不需要'ForJob(job)'信任作業和觸發器之間的鬆散耦合,這是一個明確的設計目標?幾分鐘後我會嘗試一下您的建議。 – 2013-03-26 17:28:45

+0

你可能是對的,但在這種情況下,如果你只是簡單地調用'classSched.ScheduleJob(觸發器);'Quartz不知道哪個工作會運行。也許你只需要將最後一行改爲'classSched.ScheduleJob(job,trigger); ' – sgmoore 2013-03-26 19:24:26

+0

原來我只需要將'job'參數提供給'ScheduleJob()'。 – 2013-03-26 19:56:04