题
是否有一个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的结果,当然。
此外,您还可以设置作业中要Durable
和PersistJobDataAfterExecution
,所以完成后,就可以检索其进度和别的通过scheduler.GetJobDetail(..)
事后访问其JobDataMap
。
不隶属于 StackOverflow