【发布时间】:2016-08-03 15:04:23
【问题描述】:
我们的系统使用 Quartz.Net 进行调度,并且有多种类型的作业(例如:作业类型 A、作业类型 B、作业类型 C)。我们希望避免某些类型的作业同时运行:
- 场景 1:A 类作业无法与其他 A 类作业同时运行。
- 场景 2:B 类作业不能与 C 类作业同时运行。(如果发生这种情况,我们希望 C 作业“等待”直到 B 作业完成)
我知道我可以使用DisallowConcurrentExecutionAttribute 属性来实现场景 1。但我不知道如何使用内置的 Quartz.Net 功能来实现场景 2。
我可以将工作线程的数量限制为 1,但这会杀死所有并发,这是不希望的。 (A-jobs可以和B-jobs同时运行)
当然,我可以在作业中编写此逻辑,但最好我不希望 B 类作业知道 C 类作业。
【问题讨论】:
-
不知道它是否会工作......但尝试创建一个基础/抽象类......(公共抽象类 MyTwoBuddiesNonCurrentBaseJob)......让你的两个工作继承自它............并将您的属性放在抽象类上。我怀疑它会起作用,但值得一试。