是否有一个IJob从作业内发布数据的简单方法。我有运行导入过程的工作,但想取回通过查找工作,并要求它的进展情况。

我认为我可能能够使用JobDetails,但似乎并没有反映工作中所做的更改?

有帮助吗?

解决方案

有是不是会给你很容易你正在寻找的东西一个内置的方式。但它并不难发布进度信息到其他设备通过发布订阅无论是。您也可以定期编写进度信息,以持久性存储 - 这也将让您轻松重试的好处,当你知道这是处理的最后一个成功的比特

这是外界线程/进程也可以决定自己的状态,如果它调查的,你导入的目标,你将有地方有关将要进口的总项信息。

Quartz.NET作业是被处理为一个单位..以及单元和因此没有多少有尚未完成的概念。或者你需要依赖于进口过程中的另一个工作这个信息?

其他提示

这是很可能。

我会去像这样的东西。 在工作:

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的结果,当然。

此外,您还可以设置作业中要DurablePersistJobDataAfterExecution,所以完成后,就可以检索其进度和别的通过scheduler.GetJobDetail(..)事后访问其JobDataMap

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top