quartz.net StartNow()没用, 不会马上调度一次。 starAt()方法也没有用,求解啊。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了quartz.net StartNow()没用, 不会马上调度一次。 starAt()方法也没有用,求解啊。相关的知识,希望对你有一定的参考价值。

.StartNow()和.WithCronSchedule()在同一个Trigger使用好像不行,.StartNow()是描述开始的时间而.WithCronSchedule()是使用Cron表达式来描述一整个时间周期,如果是这种情况下导致.StartNow()没有效果,可以使用2个Trigger来把.StartNow()和.WithCronSchedule()分开来使用,代码如下:

//2、创建一个任务
IJobDetail job = JobBuilder.Create<TimeJob>().WithIdentity("job1", "group1").StoreDurably(true).Build();
//3、创建一个触发器
//DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);
ITrigger trigger1 = TriggerBuilder.Create()
.StartNow()//获取当前时间,把当前时间设为执行时间
.WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever()) //从当前时间开始每隔五秒执行一次
.EndAt(DateTimeOffset.Now.AddSeconds(60))//获取当前时间,加上60秒,把加上后的时间设为结束时间
.ForJob("job1", "group1")//通过表名和组名进行关联
.Build();
ITrigger trigger2 = TriggerBuilder.Create()
.WithCronSchedule("0/10 * * * * ? *")//Cron表达式执行,秒数如果为10,20,30,40,50,60就会执行
.ForJob(job)//直接IJobDetail关联和通过表名和组名进行关联选一种即可
.Build();
//4、将任务与触发器添加到调度器中
scheduler.AddJob(job, true);
scheduler.ScheduleJob(trigger1);
scheduler.ScheduleJob(trigger2);
//5、开始执行
scheduler.Start();

参考技术A 小记:Quartz StartNow() 无效

今天遇到一个问题,调度器在启动时无法立刻开始执行任务,代码如下:
var trigger = TriggerBuilder.Create()
.StartNow() //此处无效
.WithCronSchedule("0 0/30 10-20 * * ?")
.Build();

F12 可以看到 StartNow() 注释如下:
//
// 摘要:
// Set the time the Trigger should start at to the current moment - the trigger
// may or may not fire at this time - depending upon the schedule configured
// for the Trigger.
//
// 返回结果:
// the updated TriggerBuilder
public TriggerBuilder StartNow();

在 stockoverflow 上查找结果如下

以上是关于quartz.net StartNow()没用, 不会马上调度一次。 starAt()方法也没有用,求解啊。的主要内容,如果未能解决你的问题,请参考以下文章

Quartz.NET总结Quartz 远程调度

Quartz.Net学习笔记-简介

Quartz.NET笔记 概述

基于进程的Quartz.NET管理系统QuartzService

.Net Core中使用Quartz.Net

Quartz.NET笔记 CronTrigger