创建暂停的触发器

时间:2013-08-21 17:04:01

标签: c# quartz.net

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

除了立即致电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);

3 个答案:

答案 0 :(得分:2)

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

// 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);
}

答案 1 :(得分:1)

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

e.g。延迟开始30分钟:

var trigger = TriggerBuilder.Create()
    .ForJob(job)
    .WithSimpleSchedule(schedule => schedule.WithIntervalInMinutes(1).RepeatForever())
    .StartAt(DateTime.UtcNow.AddMinutes(30))
    .Build();

答案 2 :(得分:1)

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

Scheduler.PauseTriggerScheduler.PauseJob将触发器的状态设置为InternalTriggerState.Pausedsee reference

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

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);
相关问题