gpt4 book ai didi

.net - 如何使Quartz.NET进程同步?

转载 作者:行者123 更新时间:2023-12-04 04:45:57 28 4
gpt4 key购买 nike

我有一个计划的工作,每5分钟重复一次间隔。一切正常。

但是我遇到的情况是我的第一份工作在5分钟内未完成,而第二份工作正在开始(按原计划的5分钟)。

我不想这样做,一次只能做一份工作。我怎样才能做到这一点?

这是我的代码:

ISchedulerFactory schedFact = new StdSchedulerFactory();
IScheduler sched = schedFact.GetScheduler();
Trigger emailTrigger = TriggerUtils.MakeMinutelyTrigger(5);
emailTrigger.StartTimeUtc = TriggerUtils.GetEvenMinuteDate(DateTime.UtcNow);
emailTrigger.Name = "EmailTrigger";
JobDetail emailJobDetail = new JobDetail("EmailJob", null, typeof(EmailJob));
sched.ScheduleJob(emailJobDetail, emailTrigger);
sched.Start();

最佳答案

我曾经使用过Quartz.net,但从未研究过在作业之间强制执行串行处理。根据我的经验,Quartz更适合于“并行”调度处理,如果长时间运行,作业可能会重叠,因此我不确定它是否支持您的需求。

解决问题的一种简单方法是使用可以由任何作业线程(例如,锁,互斥,信号量或全局 bool 值等)访问的同步变量。当新作业启动时,它应该检查锁,如果锁是免费的,请捕获它并按住直到完成。如果另一个作业被唤醒,并且看到先前的作业仍在运行,则新的作业可以退出,并等待调度程序在下一个间隔再次尝试。您也可以让新作业等待上一个作业完成,但是如果这样做,则存在作业堆积等待执行的风险,并且系统永远不会“ catch ”。

关于.net - 如何使Quartz.NET进程同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3895856/

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