Quartz.NETスケジューラでスケジュールされたすべてのアクティブなジョブをどのように取得できますか?私はGetCurrentlyExecutingJobs()を試みましたが、常に0を返しています。Quartz.NETスケジューラからすべてのアクティブなジョブを取得
6
A
答えて
8
このメソッドは動作していないようです。
私が見つけた唯一の解決策は、すべてのジョブをループしました:ジョブが発見された場合
var groups = sched.JobGroupNames;
for (int i = 0; i < groups.Length; i++)
{
string[] names = sched.GetJobNames(groups[i]);
for (int j = 0; j < names.Length; j++)
{
var currentJob = sched.GetJobDetail(names[j], groups[i]);
}
}
それがまだアクティブであることを意味します。 ジョブをdurableに設定すると、関連するトリガーがない場合は削除されません。そのような状況で
は、このコードはうまく機能:
var groups = sched.JobGroupNames;
for (int i = 0; i < groups.Length; i++)
{
string[] names = sched.GetJobNames(groups[i]);
for (int j = 0; j < names.Length; j++)
{
var currentJob = sched.GetJobDetail(names[j], groups[i]);
if (sched.GetTriggersOfJob(names[j], groups[i]).Count() > 0)
{
// still scheduled.
}
}
}
UPDATE:
私はGetCurrentlyExecutingJobs()
と何が起こるかを確認するために、いくつかのデバッグをしました。
実際には実行されているジョブが返されますが、要素はジョブが実行されるとすぐにコレクションから削除されます。
QuartzSchedulerクラスの2つの関数JobToBeExecuted
とJobWasExecuted
を確認できます。
+0
実行中のジョブを取得しますか?上記のメソッドは、一時停止して実行中のすべてのジョブを返します。 – VJAI
この方法はクラスタ対応ではないため、 'quartz.jobStore.clustered'をfalseに設定すると、正しい番号が返されます –