簡體   English   中英

Quartz.Net工作進度

[英]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設置為DurablePersistJobDataAfterExecution ,因此完成后,可以通過scheduler.GetJobDetail(..)檢索其進度以及其他任何信息,然后訪問其JobDataMap

沒有內置的方法可以輕松為您提供所需的東西。 但是通過發布訂閱將進度信息發布到其他工具並不難。 您還可以定期將進度信息寫入持久性存儲中-當您知道已處理的最后一個成功位時,這也將使您容易重試。

如果外部線程/進程輪詢了要導入的目標,並且可能在某處獲得有關將要導入的項目總數的信息,則它也可以確定狀態。

Quartz.NET作業是作為井單元處理的單元,因此沒有多少要做的概念。 還是在依賴於導入過程的另一項工作中需要此信息?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM