【问题标题】:Quartz.Net: Prevent different job types from running concurrentlyQuartz.Net:防止不同作业类型同时运行
【发布时间】: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)......让你的两个工作继承自它............并将您的属性放在抽象类上。我怀疑它会起作用,但值得一试。

标签: quartz.net quartz.net-2.0


【解决方案1】:

您可以为 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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多