[英]Quartz.Net Job Progress
IJob是否有一種簡便的方法可以從Job內部發布數據。 我有一個Job正在運行導入過程,但想通過查找Job並請求它來檢索進度。
我以為我可以使用JobDetails,但似乎無法反映Job內所做的更改?
這是很有可能。
我會選擇這樣的東西。 在工作中:
public virtual void Execute(IJobExecutionContext context)
{
int i = 0;
while (i++ < 100)
{
context.JobDetail.JobDataMap["progress"] = i;
Thread.Sleep(1000);
}
}
在要檢索進度的代碼中:
var jobs = scheduler.GetCurrentlyExecutingJobs();
foreach (var j in jobs)
{
Console.WriteLine("Progress of {0} is {1}",
j.JobDetail.Key,
j.JobDetail.JobDataMap["progress"]);
}
當然,您可以過濾GetCurrentlyExecutingJobs的結果。
另外,您可以將job設置為Durable
和PersistJobDataAfterExecution
,因此完成后,可以通過scheduler.GetJobDetail(..)
檢索其進度以及其他任何信息,然后訪問其JobDataMap
。
沒有內置的方法可以輕松為您提供所需的東西。 但是通過發布訂閱將進度信息發布到其他工具並不難。 您還可以定期將進度信息寫入持久性存儲中-當您知道已處理的最后一個成功位時,這也將使您容易重試。
如果外部線程/進程輪詢了要導入的目標,並且可能在某處獲得有關將要導入的項目總數的信息,則它也可以確定狀態。
Quartz.NET作業是作為井單元處理的單元,因此沒有多少要做的概念。 還是在依賴於導入過程的另一項工作中需要此信息?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.