C# 石英触发器在第一个触发器忙时堆叠
我有一个第二个触发器,带有C# 石英触发器在第一个触发器忙时堆叠,c#,quartz-scheduler,quartz.net,C#,Quartz Scheduler,Quartz.net,我有一个第二个触发器,带有和MISHIFREHandling指令Onothing: var trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .WithCronSchedule("0/1 0/1 0/1 1/1 * ? *", x => x.WithMisfireHandlingInstructionDoNothing())
和MISHIFREHandling指令Onothing
:
var trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.WithCronSchedule("0/1 0/1 0/1 1/1 * ? *", x => x.WithMisfireHandlingInstructionDoNothing())
.StartNow()
.Build();
详细信息如下:
var jobDetail = JobBuilder.Create<TestJob>()
.WithIdentity(JobKey.Create("TestJob")).Build();
以下是调度程序的初始化方式:
var scheduler = new StdSchedulerFactory().GetScheduler().GetAwaiter().GetResult();
scheduler.ScheduleJob(jobDetail, trigger);
scheduler.Start();
我得到的结果是:
正如你们所看到的,这项工作不是并行的,这是好的。但我不希望第二个作业触发器在前3次运行中处于休眠状态时堆叠起来。在3次运行后,所有堆叠的触发器都会立即相互触发。从2020年7月14日9:45:30开始,该作业至少被调用15次。这是我不想要的行为。我不希望在工作繁忙时这些电话堆积起来
我想我可以使用带有缺火处理指令的来完成这项工作,但没有效果
我希望这是清楚的,谢谢你的帮助
编辑
可能和我得到的有关。我如何在C#中配置它?正如您所指出的,问题在于缺火treshold
如果未通过此超时,则触发器不会被视为未触发,因此您需要减少它
您可以这样做:
NameValueCollection props = new NameValueCollection
{
.....,
{ "quartz.jobStore.misfireThreshold", "1000" },
.....
};
StdSchedulerFactory factory = new StdSchedulerFactory(props);
但这取决于配置quartz实例的方式
如果使用配置文件,则可以添加:
quartz.jobStore.misfireThreshold = 1000
NameValueCollection props = new NameValueCollection
{
.....,
{ "quartz.jobStore.misfireThreshold", "1000" },
.....
};
StdSchedulerFactory factory = new StdSchedulerFactory(props);
quartz.jobStore.misfireThreshold = 1000