我試圖讓簡單的預定作業中Quartz.NET 2.0Quartz.NET執行工作只有一次
我讀過有關類似問題,但它並沒有爲我工作了。
問題是作業在StartAt觸發器後僅執行一次。
這裏是我的代碼:
public EntityMappingSvc()
{
IJobDetail job = JobBuilder.Create<EntityMappingJob>().WithIdentity("QueueJob").Build();
TriggerBuilder tb = TriggerBuilder.Create();
tb.WithIdentity("StdTrigger");
tb.WithSimpleSchedule(a => a.WithIntervalInMinutes(1));
tb.StartAt(new DateTimeOffset(new DateTime(2012, 11, 20, 10, 55, 0)));
tb.ForJob(job);
ITrigger trigger = tb.Build();
Global.sched.ScheduleJob(job, trigger);
}
protected void Application_Start(object sender, EventArgs e)
{
Global.factory = new StdSchedulerFactory();
Global.sched = Global.factory.GetScheduler();
Global.sched.Start();
GC.KeepAlive(factory);
GC.KeepAlive(sched);
}
的工作也很簡單......但測試它,我不得不提高該被捕獲並處理分開,並且不影響實際作業的錯誤。
它運行作業後的第一次,它被封鎖在
while (runnable == null && run)
{
Monitor.Wait(this, 500);
}
if (runnable != null)
{
ran = true;
runnable.Run();
}
在SimpleThreadPool Run方法。
有什麼建議嗎?
PS:該應用程序是一個WCF IIS託管服務。
編輯:
TriggerBuilder tb = TriggerBuilder.Create();
tb.WithIdentity("StdTrigger");
tb.WithCronSchedule("0 1 * * * ?");
tb.StartAt(new DateTimeOffset(new DateTime(2012, 11, 20, 10, 45, 0)));
tb.ForJob(job);
ICronTrigger trigger = tb.Build() as ICronTrigger;
Global.sched.ScheduleJob(job, trigger);
仍然沒有工作。
同樣的問題。
我已經這樣做了,工廠和調度程序在Global.asax中是靜態的,但是是公共的,所以我可以從服務構造函數實例化它們。 – GxG
與我的情況在觸發器類型的唯一區別,嘗試cron之一。 –
仍然沒有,檢查編輯也許我沒有使用Cron權利 – GxG