5

是否可以在暂停状态下向调度程序添加触发器?我发现如果我不指定开始时间,它将立即开始。

除了立即调用之外scheduler.PauseJob,这可以通过其他方式完成吗?

var trigger = TriggerBuilder.Create()
    .ForJob(job)
    .WithSimpleSchedule(schedule => schedule.WithIntervalInMinutes(1).RepeatForever())
    .Build();

scheduler.ScheduleJob(job, trigger);

// Pause job immediately
scheduler.PauseJob(job.Key);
4

3 回答 3

3

实际上可以使用触发组来执行此操作。您只需要暂停一个特定的触发器组,然后创建一个触发器属于该组的作业。

// pauses the group, if it isn't already
scheduler.PauseTriggers(GroupMatcher<TriggerKey>.GroupEquals("PausedGroup"));

var job = JobBuilder.Create<MyJob>().WithIdentity(jobName).Build();

var trigger = TriggerBuilder.Create()
    .ForJob(job)
    .WithIdentity(Guid.NewGuid().ToString(), "PausedGroup")
    .WithSimpleSchedule(schedule => schedule.WithIntervalInMinutes(1).RepeatForever())
    .Build();

scheduler.ScheduleJob(job, trigger);

然后要恢复作业,请使用不同的组重新安排每个触发器:

foreach (var oldTrigger in scheduler.GetTriggers(new JobKey(jobName)))
{
    // clone the old trigger with new group name
    var newTrigger = oldTrigger.GetTriggerBuilder()
        .WithIdentity(oldTrigger.Key.Name) // uses default trigger group name
        .Build();

    // not a typo, the method to reschedule a trigger is called "RescheduleJob" for some reason
    scheduler.RescheduleJob(oldTrigger.Key, newTrigger);
}
于 2017-04-06T19:04:32.593 回答
1

一种可能的解决方案是使用触发器构建器上的 StartAt() 方法来设置特定的开始时间。

例如延迟启动 30 分钟:

var trigger = TriggerBuilder.Create()
    .ForJob(job)
    .WithSimpleSchedule(schedule => schedule.WithIntervalInMinutes(1).RepeatForever())
    .StartAt(DateTime.UtcNow.AddMinutes(30))
    .Build();
于 2013-08-21T18:08:09.443 回答
1

我检查了存储库,似乎不可能。
在计划完成之前,您不能暂停触发器/作业。

Scheduler.PauseTrigger并将Scheduler.PauseJob触发器的状态设置为InternalTriggerState.Paused参见参考资料

我建议你安排你的触发器稍微延迟开始并立即暂停它。

var trigger = TriggerBuilder.Create()
    .ForJob(job)
    .WithSimpleSchedule(schedule => schedule.WithIntervalInMinutes(1).RepeatForever())
    .StartAt(SystemTime.UtcNow().AddSeconds(5))
    .Build();

scheduler.ScheduleJob(job, trigger);

scheduler.PauseTrigger(trigger.Key);
于 2013-08-22T16:21:12.630 回答