1

我们的系统使用 Quartz.Net 进行调度,并且有多种类型的作业(例如:作业类型 A、作业类型 B、作业类型 C)。我们希望避免某些类型的作业同时运行:

  • 场景一:A 类作业不能与其他 A 类作业同时运行。
  • 场景 2:类型 B 的作业不能与类型 C 的作业同时运行。(如果发生这种情况,那么我们希望 C 作业“等待”直到 B 作业完成)

我知道我可以使用该DisallowConcurrentExecutionAttribute属性来实现场景 1。但我不知道如何使用内置的 Quartz.Net 功能来实现场景 2。

我可以将工作线程的数量限制为 1,但这会杀死所有并发,这是不希望的。(允许 A 作业与 B 作业同时运行)

当然,我可以在作业中编写此逻辑,但最好我不希望 B 类作业知道 C 类作业。

4

1 回答 1

2

您可以为 B 和 C 作业创建单独的调度程序,并将其配置为在其池中具有 1 个线程。从如何设置 Quartz.NET 线程池中的线程数SO 答案:

var properties = new NameValueCollection { {"quartz.threadPool.threadCount", "1"} };

var schedulerFactory = new StdSchedulerFactory(properties);
var scheduler = schedulerFactory.GetScheduler();
于 2016-08-17T09:28:18.237 回答