Quartz.NET学习笔记(三) 简单触发器
触发器是Quartz.NET的另外第一个核心元素,他有2种类型,简单触发器(Simple Trigger)和计划任务触发器(Cron Trigger), 一个触发器可以绑定一个任务。
通用触发器属性
- JobKey – 当前触发器绑定任务的唯一标识符
- StartTimeUtc – 触发器的生效开始时间
- EndTimeUtc – 触发器的生效结束时间
设置触发器的优先级
有些时候,你的程序中可能需要多个触发器,Quartz.NET的调度器可能在同一时间没有足够的资源来触发所有的触发器,这时候我们就需要给触发器设置优先级,让Quartz.NET帮助我们优先触发优先级高的触发器。
在声明触发器的时候,可以使用WithPriority方法为触发器指定一个优先级权重,权重越高的,调度器会优先触发
例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | ISchedulerFactory schedFact = new StdSchedulerFactory(); IScheduler sched = schedFact.GetScheduler(); IJobDetail job = JobBuilder.Create<FirstJob>() .UsingJobData( "MyName" , "Lunan" ) .WithIdentity( "myJob" ) .Build(); IJobDetail job2 = JobBuilder.Create<SecondJob>() .UsingJobData( "MyName" , "Lunan" ) .WithIdentity( "myJob2" ) .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity( "myTrigger" ) .StartNow() .WithPriority(8) .Build(); ITrigger trigger2 = TriggerBuilder.Create() .WithIdentity( "myTrigger2" ) .StartNow() .WithPriority(999) .Build(); sched.ScheduleJob(job, trigger); sched.ScheduleJob(job2, trigger2); sched.Start(); |
执行结果
简单触发器(Simple Trigger)
如果你的项目需求是一下2种类型,可以使用Quartz.NET中的简单触发器。
- 在某个时间点执行一次任务
- 在某个时间点开始执行任务,并之后每隔固定的时间,再次执行当前任务
在某个时间点触发一次任务就停止#
1 2 3 4 5 6 7 8 9 | ISimpleTrigger trigger3 = (ISimpleTrigger)TriggerBuilder.Create() .WithIdentity( "trigger3" , "group1" ) .StartAt( new DateTime(2017, 7, 12, 15, 30, 0)) .ForJob( "job1" , "group1" ) .Build(); |
该任务会在2017-07-12 15:30:00被执行。
在某个时间点触发触发任务,并在之后每10分钟继续触发一次#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ISimpleTrigger trigger4 = (ISimpleTrigger)TriggerBuilder.Create() .WithIdentity( "trigger4" , "group1" ) .StartAt( new DateTime(2017, 7, 12, 15, 30, 0)) .WithSimpleSchedule(x => { x.WithIntervalInMinutes(10); x.RepeatForever(); }) .ForJob( "job1" , "group1" ) .Build(); |
该任务会在2017-07-12 15:30:00被执行,然后每10分钟运行一次,永不停止。
在某个时间点开始触发任务,并在之后每10分钟继续触发一次,触发10次#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ISimpleTrigger trigger5 = (ISimpleTrigger)TriggerBuilder.Create() .WithIdentity( "trigger5" , "group1" ) .StartAt( new DateTime(2017, 7, 12, 15, 30, 0)) .WithSimpleSchedule(x => { x.WithIntervalInMinutes(10); x.WithRepeatCount(10); }) .ForJob( "job1" , "group1" ) .Build(); |
该任务会在2017-07-12 15:30:00被执行,然后每10分钟运行一次,运行10次。
注:这里需要注意,这个触发器会触发11次,15:30会执行一次,加上后面的10次,一共是11次。
在某个时间点开始触发任务,并在之后每10分钟继续触发一次,直到某个时间结束#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ISimpleTrigger trigger7 = (ISimpleTrigger)TriggerBuilder.Create() .WithIdentity( "trigger7" , "group1" ) .StartAt( new DateTime(2017, 7, 12, 15, 30, 0)) .WithSimpleSchedule(x => x .WithIntervalInMinutes(5) .RepeatForever()) .EndAt(DateBuilder.DateOf(22, 0, 0)) .Build(); |
该任务会在2017-07-12 15:30:00被执行,然后每10分钟运行一次,直到当天的22:00结束。
从当前时间开始,一定时间之后,执行一次任务#
1 2 3 4 5 6 7 8 9 | ISimpleTrigger trigger6 = (ISimpleTrigger)TriggerBuilder.Create() .WithIdentity( "trigger6" , "group1" ) .StartAt(DateBuilder.FutureDate(5, IntervalUnit.Minute)) .ForJob( "job1" , "group1" ) .Build(); |
该任务会在未来5分钟的时候,运行一次
分类:
.NET
, Quartz.NET
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构