3

我想Timer在我的IJob. 因为Timer是一次性的,所以我做了我的IJobimplement IDispose,但我不确定Dispose()从哪里调用,因为IJob创建和销毁是由调度程序处理的。

4

1 回答 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 回答