我想Timer
在我的IJob
. 因为Timer
是一次性的,所以我做了我的IJob
implement IDispose
,但我不确定Dispose()
从哪里调用,因为IJob
创建和销毁是由调度程序处理的。
问问题
1919 次
1 回答
1
我有一个负责所有工作创建的类,所以我已经实现IJobListener
了它,并注册它来监听所有工作。
在JobWasExecuted
中,我在方法的末尾添加了以下内容:
if (context.JobInstance.GetType().IsSubclassOf(typeof(MyBaseJobType)))
{
(context.JobInstance as MyBaseJobType).Dispose();
}
我不知道这是否是“正确”的方式,但它似乎正在工作。我不认为调度程序Dispose()
是自动的,因为在添加上述内容之前,我的计时器似乎在作业完成后继续运行;显然它使工作线程保持活力。此外,IJob 不会自行实现IDispose
,因此恕我直言,调度程序的预期行为不会是Dispose
.
编辑:另一个想法是Dispose()
计时器回调中的计时器,以及Execute()
. 但是,仔细考虑一下:如果IJob
抛出 a JobExecutionException
,它将不会被正确处理;所以这可能不是一个好的选择。
于 2013-09-13T20:55:43.447 回答