Quartz.net - 如何跳到 next_fire_time?
Quartz.net - How to skip to next_fire_time?
我正在使用 Quartz.net 来 运行 这份工作。我找不到跳过当前触发器并等待下一次触发时间的方法。
我想在每天凌晨 3 点到 6 点 运行 我的工作。但是我想停止 运行ning 并等待第二天,如果我在早上 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 );
我的工作
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!");
}
}
我找到了解决方案。
我无法在 MyJob class 中使用下面的代码。
context.Scheduler.RescheduleJob(context.Trigger.Key, myTrigger );
所以,我必须这样改..
var scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.RescheduleJob(context.Trigger.Key, aastarPreLoadTrigger);
但不幸的是,不支持async/await..
注:
我的新代码解决了重新安排问题但没有停止,所以我认为我需要简单的调度程序而不是日常计时器并将开始日期设置为第二天。
ITrigger trigger = TriggerBuilder.Create()
.WithDailyTimeIntervalSchedule(
x => x.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(iTimeFrom, iMinuteFrom))
.EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(iTimeTo, iMinuteTo))
.WithIntervalInMinutes(iMinute)
.OnEveryDay()
)
.Build();
scheduler.ScheduleJob(job, trigger);
我正在使用 Quartz.net 来 运行 这份工作。我找不到跳过当前触发器并等待下一次触发时间的方法。
我想在每天凌晨 3 点到 6 点 运行 我的工作。但是我想停止 运行ning 并等待第二天,如果我在早上 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 );
我的工作
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!");
}
}
我找到了解决方案。
我无法在 MyJob class 中使用下面的代码。
context.Scheduler.RescheduleJob(context.Trigger.Key, myTrigger );
所以,我必须这样改..
var scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.RescheduleJob(context.Trigger.Key, aastarPreLoadTrigger);
但不幸的是,不支持async/await..
注:
我的新代码解决了重新安排问题但没有停止,所以我认为我需要简单的调度程序而不是日常计时器并将开始日期设置为第二天。
ITrigger trigger = TriggerBuilder.Create()
.WithDailyTimeIntervalSchedule(
x => x.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(iTimeFrom, iMinuteFrom))
.EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(iTimeTo, iMinuteTo))
.WithIntervalInMinutes(iMinute)
.OnEveryDay()
)
.Build();
scheduler.ScheduleJob(job, trigger);