c# - Quartz Scheduler (.Net) - 为什么在运行内置 'RescheduleJob' 方法后立即触发作业?

标签 c# asp.net .net quartz-scheduler quartz.net

当我使用 Quartz 运行作业时,我将详细信息记录到数据库中的表中,并且我可以看到,当我手动运行作业或安排作业时,表会在正确的位置填充作业详细信息时间。

但是,当我使用内置的 RescheduleJob 方法重新安排作业时,作业被触发了两次;在我运行该方法时执行一次,然后在作业重新安排到的时间正确执行。

示例:

将作业重新安排到 09:01:11,但该作业已两次插入数据库,时间:

09:00:23(调用 RescheduleJob 方法后的秒数)

09:01:11(重新安排的时间)

我查看了我的代码,在到达 RescheduleJob 方法之前没有调用作业。

public void RescheduleTrigger(TriggerKey key, string cronexpression)
{
 var trigger = this.GetTrigger(key);
 var triggerBuilder = trigger.GetTriggerBuilder();
 ITrigger newTrigger = triggerBuilder.WithCronSchedule(cronexpression).Build();

 this.scheduler.RescheduleJob(trigger.Key, newTrigger);
}

我用 Google 搜索了一下,只发现了一个类似的案例,但没有解决。以前有没有人遇到过这个问题,可以帮我解决这个问题?

最佳答案

我在 java 中的情况,有相同的情况,但我现在正在修改触发器开始时间 背景: 我的触发器没有设置触发结束时间,只设置了触发开始时间,重新安排后,我发现当你重置触发开始时间和当前系统时间之间的时间时会出现问题,例如触发开始时间 2016/03/04 10:早上 58 点和当前系统时间 2016/03/04 11:05 am 并且你设置 cron 表达式 0 59 10 * * ?,下一次启动时间将设置为 2016/03/05 10:59 并立即启 Action 业。 在执行“重新安排”之前重置开始时间后,问题暂时解决

scheduler.pauseAll();
Date currentDate=new Date();
trigger.setStartTime(currentDate);
scheduler.rescheduleJob(trigger.getName(), trigger.getGroup(), trigger);
scheduler.resumeAll();

关于c# - Quartz Scheduler (.Net) - 为什么在运行内置 'RescheduleJob' 方法后立即触发作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31338344/

相关文章:

c# - [C#]如何在LINQ to SQL中引入重试逻辑来处理超时?

c# - 如何将程序集标记为过时

asp.net - 如何在 ASP.Net 的复选框选择中放置交叉检查图像而不是正确检查

c# - 找不到类型或命名空间名称 'BundleCollection'(是否缺少 using 指令或程序集引用?)

c# - 具有泛型重载的 GetMethod

c# - 如何在 C# 中的时间跨度字段上排序?

c# - 为什么这个端口扫描器代码有时会错过打开的端口?

c# - 在 ASP.NET 中每个用户只允许一个并发登录

c# - 并行编程——我需要一些说明

c# - 为什么签名程序集加载缓慢?