1

次のように構成されたジョブと対応するトリガーがあるとします。

var jobKey = new JobKey(typeof(HelloJob).Name, typeof(HelloJob).Name);
        IJobDetail job = JobBuilder.Create<HelloJob>()
            .WithIdentity(jobKey)
            .RequestRecovery()
            .Build();

        ITrigger trigger = TriggerBuilder.Create()
          .WithIdentity(string.Format("{0}Trigger", typeof(HelloJob).Name), typeof(HelloJob).Name)
          .StartAt(DateBuilder.FutureDate(1, IntervalUnit.Second))
          .WithSimpleSchedule(x => x
              .WithIntervalInSeconds(1)
              .WithRepeatCount(9))
          .Build();

「quartz.jobStore.type = Quartz.Impl.AdoJobStore.JobStoreTX, Quartz」を使用します。

通常の状況ではジョブが 10 回実行されることを期待していますが、もちろん実行されます。問題は、ライフサイクル中に停止が発生した場合に、ジョブの残りの繰り返し回数を続行することです。

たとえば、ジョブの 5 回目の実行が完了したときにプログラムを停止し、次にプログラムを実行するときは、ジョブを 5 回だけ実行したいのですが、10 回実行されます。

これを行うには、スケジューラ、ジョブ、およびトリガーをどのように構成すればよいですか?

4

2 に答える 2

1

データベース オブジェクトが作成されていることを確認し、ジョブストアを構成します。

この例を見てください。それはあなたを助けることができます。

https://github.com/Leftyx/QuartzNetAdoJobStoreSQLite

于 2016-12-05T13:22:07.630 に答える
1

これを行うには、プログラム実行間の残りのカウントを保存します。

  • プログラム「停止」で、残りのカウントを外部ストレージ(ファイル、データベースなど)に保存します。実際の最良の方法は、各ジョブの実行後にこれを行うことです。
  • プログラム「開始」で、ストレージ.WithRepeatCount()から値を読み取り、定数の代わりに使用します。
于 2016-12-05T10:18:32.593 に答える