【发布时间】:2021-09-14 06:39:11
【问题描述】:
我只想在一天的特定时间触发一次事件,但它触发了 4 次,相差几毫秒 下面是我的调度程序类
public class CustomerEventAssigningJobScheduler
{
private static IScheduler _scheduler;
public static IScheduler scheduler
{
get
{
if (_scheduler == null)
{
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler().Result;
_scheduler = scheduler;
}
return _scheduler;
}
}
public static async Task Start()
{
await scheduler.Start();
IJobDetail job = JobBuilder.Create<CustomerEventAssigningJob>().WithIdentity("CustomerEventAssigningJob").Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("CustomerEventAssigningJob")
.WithDailyTimeIntervalSchedule
(s =>
s.OnEveryDay()
.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(00, 10))
.WithIntervalInHours(24)
.InTimeZone(TimeZoneInfo.Utc)
)
.Build();
await scheduler.ScheduleJob(job, trigger);
}
}
我试过了:.EndingDailyAfterCount(1)
但添加后不会触发
日志截图在这里:
【问题讨论】:
-
这看起来不错,您确定您没有多次运行此代码,或者有多个应用程序正在运行,或者其他什么?
-
@TheGeneral 生产和开发应用程序运行在服务器上都有相同的代码
-
像往常一样,我建议添加日志记录。您似乎也有一个数据库,检查那里有多少触发器。失败的触发器也可能导致立即重试。
-
@MarkoLahma 如何记录有多少触发器
-
有
IReadOnlyCollection<TriggerKey>triggers = await scheduler.GetTriggerKeys(GroupMatcher<TriggerKey>.AnyGroup());
标签: c# triggers quartz-scheduler quartz.net