1
我正在使用Quartz.net來運行這個工作。我無法找到一種方法來跳過當前的觸發器並等待下一次着火時間。Quartz.net - 如何跳至next_fire_time?
我想每天在凌晨3點到6點運行我的工作。但是如果在上午6點之前獲得我想要的狀態,我想停止跑步並等待第二天。
這是我嘗試但不起作用的代碼。任何想法如何解決它?
計劃
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();
IJobDetail myjob = JobBuilder.Create<MyJob>()
.WithIdentity("MyJob")
.Build();
ITrigger myTrigger = TriggerBuilder.Create()
.WithIdentity("MyTrigger")
.WithDailyTimeIntervalSchedule(
x => x.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(3, 00))
.EndingDailyAt(TimeOfDay.HourMinuteAndSecondOfDay(6, 00, 00))
.WithIntervalInSeconds(10))
.Build();
scheduler.ScheduleJob(myjob , myTrigger);
MyJob
public class MyJob: IInterruptableJob {
static int i=0;
public void Execute(IJobExecutionContext context) {
Console.WriteLine("Call WebService to get the status");
i++; //Just to simulate the status
if (i > 5) { //Here, I got the status so stop the timer and run at next-fire-time
ITrigger myTrigger = TriggerBuilder.Create()
.WithIdentity("MyTrigger")
.WithDailyTimeIntervalSchedule(
x => x.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(3, 00))
.EndingDailyAt(TimeOfDay.HourMinuteAndSecondOfDay(6, 00, 00))
.WithIntervalInSeconds(10))
.Build();
context.Scheduler.RescheduleJob(context.Trigger.Key, myTrigger);
}
public void Interrupt() {
Console.WriteLine("Interrupt from MyJOb!");
}
}
您可以調用web服務來獲取作業代碼中的狀態 – DLeh
對不起。如果你注意到在MyJob中,有一個代碼「if(i> 5)」和「Console.WriteLine(」Call WebService to get the status「);」所以我已經在調用該服務。問題是如何阻止它,因爲它會運行到停止時間。當我獲得正確的狀態時我想停止工作,並且我希望調度程序等待下一個時間表。 –