我想在Timer
上添加IJob
来调用超时方法。由于Timer
是一次性的,我制作了IJob
工具IDispose
,但我不知道从哪里调用Dispose()
,因为IJob
创建和销毁是由调度程序处理。
答案 0 :(得分:1)
我有一个班负责所有创造就业机会,所以我已经在其上实施了IJobListener
,并将其注册为监听所有工作。
在JobWasExecuted
中,我在方法的最后添加了以下内容:
if (context.JobInstance.GetType().IsSubclassOf(typeof(MyBaseJobType)))
{
(context.JobInstance as MyBaseJobType).Dispose();
}
我不知道这是否是“正确的”方式,但似乎有效。我不认为调度程序Dispose()
是自动的,因为在添加上述内容之前,我的计时器似乎在作业完成后继续进行;显然它保持了工作线程的活力。此外,IJob本身并未实现IDispose
,因此恕我直言预期的行为将不适用于Dispose
的调度程序。
编辑:另一个想法是计时器回调中的计时器的Dispose()
,也是Execute()
的结尾。但是要考虑到这一点:如果IJob
抛出一个JobExecutionException
,它将无法妥善处理;所以这可能不是一个好的选择。