gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:43:13 25 4
gpt4 key购买 nike

我想包含一个 Timer 来调用我的 IJob 的超时方法。由于 Timer 是一次性的,我让我的 IJob 实现了 IDispose,但我不确定在哪里调用 Dispose(),因为 IJob 的创建和销毁由调度程序处理。

最佳答案

我有一个负责创建所有工作的类,所以我在它上面实现了 IJobListener,并注册它来监听所有工作。

JobWasExecuted 中,我在方法末尾添加了以下内容:

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

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

编辑: 另一个想法是在计时器回调中以及在 Execute() 结束时对计时器进行 Dispose() .不过仔细想想:如果 IJob 抛出一个 JobExecutionException,它就不会被正确处理;所以这可能不是一个好的选择。

关于.net - 在 IDisposable 的 Quartz .NET IJob 中调用 Dispose() 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18791033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com