2011-07-11 8 views
6

Quartz.NETスケジューラでスケジュールされたすべてのアクティブなジョブをどのように取得できますか?私はGetCurrentlyExecutingJobs()を試みましたが、常に0を返しています。Quartz.NETスケジューラからすべてのアクティブなジョブを取得

+0

この方法はクラスタ対応ではないため、 'quartz.jobStore.clustered'をfalseに設定すると、正しい番号が返されます –

答えて

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つの関数JobToBeExecutedJobWasExecutedを確認できます。

+0

実行中のジョブを取得しますか?上記のメソッドは、一時停止して実行中のすべてのジョブを返します。 – VJAI