Quartz.Net:防止不同的作业类型同时运行

时间:2016-08-03 15:04:24

标签: quartz.net quartz.net-2.0

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

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

我知道我可以使用DisallowConcurrentExecutionAttribute属性来实现方案1.但我无法弄清楚如何使用内置的Quartz.Net功能实现方案2。

我可以将工作线程的数量限制为1,但这会导致所有并发性死亡,这是不受欢迎的。 (允许作业与B作业同时运行)

当然我可以在作业中编写这个逻辑,但最好不要让B类作业知道C类作业。

1 个答案:

答案 0 :(得分:2)

您可以为B和C作业创建单独的调度程序,并将其配置为在其池中包含1个线程。来自How can I set the number of threads in the Quartz.NET threadpool SO回答:

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

var schedulerFactory = new StdSchedulerFactory(properties);
var scheduler = schedulerFactory.GetScheduler();