gpt4 book ai didi

quartz-scheduler - Quartz.net 调度器和 IStatefulJob

转载 作者:行者123 更新时间:2023-12-03 19:15:15 26 4
gpt4 key购买 nike

我想知道我是否理解这一点。

http://quartznet.sourceforge.net/apidoc/

IStatefulJob instances follow slightly different rules from regular IJob instances. The key difference is that their associated JobDataMap is re-persisted after every execution of the job, thus preserving state for the next execution. The other difference is that stateful jobs are not allowed to Execute concurrently, which means new triggers that occur before the completion of the IJob.Execute method will be delayed.



这是否意味着所有触发器都将延迟到另一个触发器完成?如果是这样,我该如何做到这一点,以便在前一个触发器完成之前只有相同的触发器不会触发。

假设我有每分钟触发一次的触发器 A,但由于某种原因它很慢并且需要一分半钟才能执行。如果我只使用计划 IJob,下一个会触发,我不想要这个。我想停止触发器 A 再次触发,直到它完成。

然而,与此同时,我也有每分钟触发一次的触发器 B。它以正常速度运行,每分钟准时完成。我不希望触发器 B 因为触发器 A 而被搁置。

据我了解,如果我使用 IStatefulJob 会发生这种情况。

最佳答案

简而言之..这种行为来自工作方面。因此,无论有多少触发器,您一次只能运行给定 IStatefulJob(作业名称、作业组指定实例 ID)的单个实例。因此,如果作业实现 IStatefulJob,则可能有两个相同作业类型的实例,但没有同名作业(名称、组)。

如果触发器因此错过了触发时间,则失火指令开始发挥作用。由于先前的调用仍在运行而错过下一次触发的触发器根据其 misfire 指令决定要做什么(请参阅 API 和教程)。

使用普通的 IJob,如果您有多个触发器和/或发生失火,您无法保证同时运行多少个作业。 IJob 只是调用作业的契约(Contract)接口(interface)。 Quartz.NET 2.0 将 IStatefulJob 组合行为拆分为两个单独的属性:DisallowConcurrentExecution 和 PersistJobDataAfterExecution。

因此,您可以将相同的作业类型 (IStatefulJobs) 与两个定义(不同的作业名称)和触发器与适用的失火指令结合起来。

关于quartz-scheduler - Quartz.net 调度器和 IStatefulJob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6013166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com