在IDisposable的Quartz .NET IJob中调用Dispose()的正确方法是什么?

时间:2013-09-13 16:27:34

标签: .net quartz.net

我想在Timer上添加IJob来调用超时方法。由于Timer是一次性的,我制作了IJob工具IDispose,但我不知道从哪里调用Dispose(),因为IJob创建和销毁是由调度程序处理。

1 个答案:

答案 0 :(得分:1)

我有一个班负责所有创造就业机会,所以我已经在其上实施了IJobListener,并将其注册为监听所有工作。

JobWasExecuted中,我在方法的最后添加了以下内容:

if (context.JobInstance.GetType().IsSubclassOf(typeof(MyBaseJobType)))
{
    (context.JobInstance as MyBaseJobType).Dispose();
}

我不知道这是否是“正确的”方式,但似乎有效。我不认为调度程序Dispose()是自动的,因为在添加上述内容之前,我的计时器似乎在作业完成后继续进行;显然它保持了工作线程的活力。此外,IJob本身并未实现IDispose,因此恕我直言预期的行为将不适用于Dispose的调度程序。

编辑:另一个想法是计时器回调中的计时器的Dispose(),也是Execute()的结尾。但是要考虑到这一点:如果IJob抛出一个JobExecutionException,它将无法妥善处理;所以这可能不是一个好的选择。