为什么 Quarz.net 作业会为同一个触发器实例触发多次时间 c#

问题描述 投票:0回答:3

我正在尝试根据类似于

的配置设置为 Quarz.net 中的作业构建触发器
  var keysArray = [1,2]
                keysArray.ForEach(key =>
                {
                //schedule will be unique for a key
                        var schedule = AppConfig.Get($"CronJobs.{key}.TimeSheetAutoSubmit.Schedule.QuarzExpression") ?? "0 30 23 * * ?";
                        var timeZoneId = AppConfig.Get($"CronJobs.{key}.TimeSheetAutoSubmit.TimeZoneId") ?? "India Standard Time";

                        var trigger = TriggerBuilder.Create()
                            .ForJob(jobDetail)
                            .WithCronSchedule(schedule, x => x
                            .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById(timeZoneId)))
                            .WithIdentity($"TimeSheetAutoSubmitTrigger_{key}")
                            .WithDescription($"ConfigKey_{key}")
                            .StartNow()
                            .Build();
                        Scheduler.ScheduleJob(jobDetail, trigger);

                });

工作正常,但问题是当我检查日志时触发器多次触发

2017-03-16 12:04:12,247 [DefaultQuartzScheduler_Worker-1] INFO  UnitedLex.Services.JobHandlers.timesheetautosubmit - job started
2017-03-16 12:04:13,510 [DefaultQuartzScheduler_Worker-2] INFO  UnitedLex.Services.JobHandlers.timesheetautosubmit - job started
2017-03-16 12:04:13,710 [DefaultQuartzScheduler_Worker-2] INFO  UnitedLex.Services.JobHandlers.timesheetautosubmit - job started

不知道我在这里做错了什么......

c# quartz-scheduler quartz.net
3个回答
1
投票

我可能是错的,但我认为这是正常的,因为你的作业构建器/调度程序位于 foreach 内,它被触发的次数等于你的数组的长度。


0
投票

如果您希望作业不以并发模式运行,请在作业定义中使用此属性

[DisallowConcurrentExecution]

这样下一个作业触发器将等待当前正在运行的作业完成。


0
投票

我遇到了同样的问题,问题是使用了错误的 cron 表达式。举个例子,如果我使用

*/2 * * * *
来安排每 2 分钟一次,它会触发多次,但使用
0 0/2 * 1/1 * ? *
则不会。

尝试使用 cronmaker 来构建时间表,它使用所谓的 Quartz 格式。

© www.soinside.com 2019 - 2024. All rights reserved.