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

リポジトリを確認しましたが、可能ではないようです。
スケジュールされるまで、トリガー/ジョブを一時停止することはできません。

Scheduler.PauseTriggerScheduler.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 に答える
1

考えられる解決策の 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 に答える