我有一个.net Windows服务,它创建和安排石英作业,计划每4小时运行一次SUN-SAT从Windows服务启动当天凌晨4点开始。不幸的是,我启动Windows服务工作的那一刻就会在计划之前被触发,并且重复工作超过几次,之后它只按照计划工作。如何在启动Windows服务后立即阻止作业运行,并且只在预定时间运行。我使用crons调度程序。我使用Oracle DB维护我的工作时间表。
ITrigger objESLJobTrigger = TriggerBuilder.Create()
.WithIdentity("Trigger-" + Key.ToString(), xxx.ToString())
.StartAt(DateTimeOffset.Parse(DateTime.Today.AddHours(4).ToString()).LocalDateTime)
.WithCronSchedule("0 0 0/4 ? * SUN-SAT", x => x.WithMisfireHandlingInstructionIgnoreMisfires())
.Build();
答案 0 :(得分:2)
评论后更新:
是的,您需要使用StartAt
方法,但是:
如果服务在凌晨4点之前开始,您需要在StartAt
使用今日日期,否则请使用明天日期:
var startAtDateTime = DateTime.Today.AddHours(4);
if (startAtDateTime < DateTime.UtcNow)
{
startAtDateTime = startAtDateTime.AddDays(1);
}
and then use .StartAt(new DateTimeOffset(startAtDateTime))
注意StartAt
预计UTC格式的时间,而不是本地时间,所以如果您需要在当地时区凌晨4点开始工作,请不要忘记时区偏移。
另外&#39; SUN-SAT&#39;意味着每天都可以将你的cron表达式简化为0 0 0/4 ? * *