我正在研究Quartz.NET的调度任务。其中一个要求是我希望能够将多个作业安排到同一个触发器(基本上共享一个触发器)。但是,Quartz.NET不允许这样做。我还注意到在Windows任务计划程序中,您也无法共享触发器。
将多个作业映射到同一触发器似乎是一个常见的要求。我的问题是,为什么不允许这样做?有没有理由不将多个作业安排到同一个触发器上?
答案 0 :(得分:3)
在Quartz中,您可以为同一作业分配多个触发器,因为某些调度不能由单个触发器表示。 可能Quartz不支持反向连接(每个触发器有多个作业),因为:
这会增加现有代码的复杂性,现有代码已经允许每个作业有多个触发器。
通过创建复合作业,可以轻松完成每个触发器的多个作业,其目的是运行其他作业。
答案 1 :(得分:2)
我从未想过它,它看起来像一个吸引人的想法。但我想,这只是一个猜测,它无法完成的原因与可管理性和资源有关。
可管理性:作业(或任务)是在计划程序中管理的主要实体。它可以有多个触发器。这些触发器应该(最好)不相互竞争。假设您可以在作业之间共享触发器并且您想要更改触发器。很难判断您的更改是否会干扰受其影响的任何其他作业的任何其他触发器。我不知道Quartz的设计者,但这可能是不允许共享触发器的原因。它将引入横向管理层。
资源:共享触发器将在完全相同的时刻促进作业的执行。 Quartz的线程池实际上是无限的,但机器资源显然不是。当同时触发不同的触发器时,您可以通过设置其优先级来进行一些调整。但是,当一个触发器多次触发时,这种可能性就会消除(或者应该进行一些自动调整)。