【问题标题】:What's the generally accepted means of cancelling a Quartz.Net job chain?取消 Quartz.Net 工作链的普遍接受的方法是什么?
【发布时间】:2015-10-09 02:43:22
【问题描述】:
我使用 Listeners 将一系列 Quartz.Net 作业链接在一起:
- 作业 A 执行...
- JobAListener.JobWasExecuted() 方法被调用,然后执行 Job B
- 作业 B 执行...
- JobBListener.JobWasExecuted() 方法被调用,然后执行 Job C
- 等等……
假设作业 A 以这样一种方式失败,我不想重新解雇该作业并且我想短路作业链的其余部分。换句话说,我想在 Job A 失败后停止执行链的其余部分。
这样做的正确方法是什么?
【问题讨论】:
标签:
.net
quartz-scheduler
quartz.net
quartz.net-2.0
【解决方案1】:
您的作业监听器上的JobWasExecuted() 方法应该将IJobExecutionContext 和JobExecutionException 作为Quartz 提供的参数。当为 JobA 触发 JobWasExecuted() 时,我会检查 JobExecutionException 是否为空。如果它不为空,那么您知道在触发 JobA 时发生了未处理的异常,您根本无法触发 JobB。这实际上将“短路”调用链。
这假定未处理的异常是您确定 JobA 是否失败的标准(您没有指定)。如果您需要检查超出此范围的内容,您可以随时查看IJobExecutionContext 的属性以获取更多信息。