2011-07-11 66 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