前回の続きです。
今回は二つ目のタイプのジョブについて。
2.Delayed
指定した時間の経過後に遅延実行されるタイプ。
BackgroundJob.Schedule()
またはBackgroundJob.Schedule<T>()
で登録する際にTimeSpan型で指定した時間を経過した後に実行されます。
ドキュメントとしてはこちらを参照 : Calling methods with delay
コード例
遅延時間はTimeSpan型で指定します。例えば10分後だとこんな指定です。
BackgroundJob.Schedule<MyJobsLib.ICostomJob>(x => x.Execute("Job Executed."), TimeSpan.FromMinutes(10));
ダッシュボード表示
ダッシュボードを見るとこんな感じになってます。
Jobテーブル
jobテーブル上のステータスはScheduled
になってます。
Setテーブル
そしてSetテーブルになにやらエントリが作られています。
Score列に1501998606
という値が入っています。この値についてドキュメントでの言及を見つけることはできなかったのですが、ソースを見る限りは以下のようです*1。
- SetテーブルのScore列(float型)には実行時のUNIXエポックからのUTCの秒数が格納されいる
- Hangfire Serverがスケジュールをポーリング
- 現在日時とScoreから算出される日時を比較し経過していたら実行される
当初は上記 3 のタイミングで、一度キューに入れられた後改めでキューがポーリングされたタイミングで実際に実行される……と思ったのですが、動きを見る分にはどうもそういうわけではなく、スケジュールのポーリングのタイミングで実行まで行われてるように見えました*2。
スケジュールのポーリングの設定
既にスケジュールはHangfire Serverからポーリングされて実行されることについては書きましたが、ついでにこのポーリング間隔の設定にも触れておきます。
Delayedの場合のスケジュールは、Hangfire ServerのオプションであるBackgroundJobServerOptions
のSchedulePollingInterval
で決められています。これも規定値は15秒で、秒以上の単位でカスタマイズできるようです。この設定についても先に紹介したドキュメントで触れられています。
次回
次は 『Continuations』タイプのジョブ実行について書きます。