取消 Quartz.Net 作业链的普遍接受方式是什么?
What's the generally accepted means of cancelling a Quartz.Net job chain?
我有一系列 Quartz.Net 使用监听器链接在一起的作业:
- 作业 A 执行...
- JobAListener.JobWasExecuted()方法被调用,然后执行Job B
- 作业 B 执行...
- JobBListener.JobWasExecuted()方法被调用,然后执行Job C
- 等等...
假设作业 A 以这样的方式失败,我不想重新启动该作业,而是想缩短作业链的其余部分。换句话说,我想在作业 A 失败后停止执行链的其余部分。
这样做的正确方法是什么?
作业侦听器上的 JobWasExecuted()
方法应该采用 IJobExecutionContext
和 JobExecutionException
作为 Quartz 提供的参数。当为 JobA 触发 JobWasExecuted()
时,我只是检查 JobExecutionException
是否为空。如果它不为空,那么您就知道在启动 JobA 时发生了未处理的异常,您可以简单地不启动 JobB。这实际上将 "short circuit" 调用链。
这假定未处理的异常是您确定 JobA 是否失败的标准(您未指定)。如果您需要检查超出此范围的内容,您可以随时查看 IJobExecutionContext
的属性以获取更多信息。
我有一系列 Quartz.Net 使用监听器链接在一起的作业:
- 作业 A 执行...
- JobAListener.JobWasExecuted()方法被调用,然后执行Job B
- 作业 B 执行...
- JobBListener.JobWasExecuted()方法被调用,然后执行Job C
- 等等...
假设作业 A 以这样的方式失败,我不想重新启动该作业,而是想缩短作业链的其余部分。换句话说,我想在作业 A 失败后停止执行链的其余部分。
这样做的正确方法是什么?
作业侦听器上的 JobWasExecuted()
方法应该采用 IJobExecutionContext
和 JobExecutionException
作为 Quartz 提供的参数。当为 JobA 触发 JobWasExecuted()
时,我只是检查 JobExecutionException
是否为空。如果它不为空,那么您就知道在启动 JobA 时发生了未处理的异常,您可以简单地不启动 JobB。这实际上将 "short circuit" 调用链。
这假定未处理的异常是您确定 JobA 是否失败的标准(您未指定)。如果您需要检查超出此范围的内容,您可以随时查看 IJobExecutionContext
的属性以获取更多信息。