Quartz.NET-课程5:SimpleTrigger

本文介绍如何使用Quartz.NET的SimpleTrigger来安排一次性或重复性任务,包括设置开始时间、结束时间、重复次数和间隔。示例展示了如何构建不同场景下的触发器,如固定时间触发、定时重复等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是翻译的官方教程,英语水平好的可以直接看官方原文:https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/using-quartz.html

如果您需要在特定时间及时执行一次作业,或者在特定时间及之后按特定间隔重复执行,则SimpleTrigger应该能够满足您的日程安排需求。如果你想让触发器在2005年1月13日上午11点23分54秒触发,然后再触发5次,每10秒触发一次。

通过此描述,SimpleTrigger的属性包括:开始时间和结束时间,重复计数和重复间隔。所有这些属性都与您期望的完全相同,只有几个与结束时间属性相关的特殊注释。

重复计数可以是0,正整数或常数值SimpleTrigger.RepeatIndefinitely。重复间隔属性必须是TimeSpan.Zero或正的TimeSpan值。请注意,重复间隔为0会导致触发器的“重复计数”触发同时发生(或者与调度程序可以同时处理的同时发生)。

如果您还不熟悉DateTime类,则可能会发现它对计算触发器触发时间很有帮助,具体取决于您尝试创建的startTimeUtc(或endTimeUtc)。

EndTimeUtc属性(如果指定)覆盖重复计数属性。如果您希望创建一个触发器,例如每隔10秒触发一个触发器,直到某个特定时刻 - 而不必计算在开始时间和结束时间之间重复的次数,则此功能非常有用,您可以简单地指定结束时间,然后使用RepeatIndefinitely的重复次数(您甚至可以指定某个巨大数字的重复次数,肯定会比终止时间到达之前触发器实际触发的次数多。

SimpleTrigger实例使用TriggerBuilder(用于触发器的主属性)和WithSimpleSchedule扩展方法(用于SimpleTrigger特定的属性)构建。

在特定的时间内建立触发器,无需重复:

// trigger builder creates simple trigger by default, actually an ITrigger is returned
ISimpleTrigger trigger = (ISimpleTrigger) TriggerBuilder.Create()
    .WithIdentity("trigger1", "group1")
    .StartAt(myStartTime) // some Date 
    .ForJob("job1", "group1") // identify job with name, group strings
    .Build();

在特定的时刻建立触发器,然后每十秒钟触发一次,重复十次:

trigger = TriggerBuilder.Create()
    .WithIdentity("trigger3", "group1")
    .StartAt(myTimeToStartFiring) // if a start time is not given (if this line were omitted), "now" is implied
    .WithSimpleSchedule(x => x
        .WithIntervalInSeconds(10)
        .WithRepeatCount(10)) // note that 10 repeats will give a total of 11 firings
    .ForJob(myJob) // identify job with handle to its JobDetail itself                   
    .Build();

构建一个触发器,将在未来五分钟内触发一次:

trigger = (ISimpleTrigger) TriggerBuilder.Create()
    .WithIdentity("trigger5", "group1")
    .StartAt(DateBuilder.FutureDate(5, IntervalUnit.Minute)) // use DateBuilder to create a date in the future
    .ForJob(myJobKey) // identify job with its JobKey
    .Build();

建立一个现在会触发的触发器,然后每隔五分钟重复一次,直到22:00:

trigger = TriggerBuilder.Create()
    .WithIdentity("trigger7", "group1")
    .WithSimpleSchedule(x => x
        .WithIntervalInMinutes(5)
        .RepeatForever())
    .EndAt(DateBuilder.DateOf(22, 0, 0))
    .Build();

建立一个触发器,在下一个小时的顶部触发,然后每2小时重复一次:

trigger = TriggerBuilder.Create()
    .WithIdentity("trigger8") // because group is not specified, "trigger8" will be in the default group
    .StartAt(DateBuilder.EvenHourDate(null)) // get the next even-hour (minutes and seconds zero ("00:00"))
    .WithSimpleSchedule(x => x
        .WithIntervalInHours(2)
        .RepeatForever())
    // note that in this example, 'forJob(..)' is not called 
    //  - which is valid if the trigger is passed to the scheduler along with the job  
    .Build();

await scheduler.scheduleJob(trigger, job);

花一些时间看所有的由TriggerBuilder及其扩展方法WithSimpleSchedule所定义的可用的方法,这样你可以熟悉可能在上面的例子没有提供给您的选项。

SimpleTrigger MisFire说明

SimpleTrigger有几条指令可用于通知Quartz.NET在发生MisFire时应该执行的操作。(关于MisFire的更多详情参照触发器章节)。这些指令被定义为MisfirePolicy.SimpleTrigger上的常量(包括描述其行为的API文档)。说明包括:

SimpleTrigger的MisFire常量

  • MisfireInstruction.IgnoreMisfirePolicy
  • MisfirePolicy.SimpleTrigger.FireNow
  • MisfirePolicy.SimpleTrigger.RescheduleNowWithExistingRepeatCount
  • MisfirePolicy.SimpleTrigger.RescheduleNowWithRemainingRepeatCount
  • MisfirePolicy.SimpleTrigger.RescheduleNextWithRemainingCount
  • MisfirePolicy.SimpleTrigger.RescheduleNextWithExistingCount

回顾前面章节可知所有触发器都有的MisfirePolicy.SmartPolicy可供使用,此指令是所有触发器类型的默认值。

如果使用’智能策略’指令,则SimpleTrigger会根据给定SimpleTrigger实例的配置和状态,在其各种MISFIRE指令之间动态选择。SimpleTrigger.UpdateAfterMisfire()方法的文档解释了这种动态行为的细节。

构建SimpleTriggers时,您可以将简单Schedule(通过SimpleSchedulerBuilder)指定为MisFire指令:

trigger = TriggerBuilder.Create()
    .WithIdentity("trigger7", "group1")
    .WithSimpleSchedule(x => x
        .WithIntervalInMinutes(5)
        .RepeatForever()
        .WithMisfireHandlingInstructionNextWithExistingCount())
    .Build();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值