C#中quartz.net的使用
官网:https://www.quartz-scheduler.net/
Job
Job是具体的业务逻辑所在,是定时任务中要执行的那一项任务
Trigger
Trigger触发器,规定了定时任务的执行时间、频率、次数
Scheduler
Scheduler调度器将Job和Trigger关联起来,负责整个定时任务的开启、关闭
控制台程序实例
话不多说,直接开始demo:
using Quartz; using Quartz.Impl; using System; using System.Diagnostics; using System.Threading.Tasks; namespace QuartzDemo { public class Program { public static async Task Main(string[] args) { ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); IScheduler scheduler = await schedulerFactory.GetScheduler();//创建scheduler await scheduler.Start();//启动scheduler IJobDetail job = JobBuilder.Create<TestJob>() .WithIdentity("testJob", "testGroup") .Build();//创建job(jobdetail) ITrigger trigger = TriggerBuilder.Create() .WithIdentity("testTrigger", "testGroup") .StartNow() .WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever()) .Build();//创建trigger 现在开始 每2秒执行一次 无限重复 await scheduler.ScheduleJob(job, trigger);//scheduler关联trigger和job Console.ReadLine(); } } public class TestJob : IJob { public async Task Execute(IJobExecutionContext context) {//定时job的执行内容 await Task.Run(() => { Console.WriteLine($"{DateTime.Now} Hello World!!"); }); } } }
我们启动程序,输出结果如下
每隔两秒钟输出一个 Hello World!!
Scheduler简介
要使用Scheduler不能直接new这个对象,要使用ISchedulerFactory的实现类(工厂)来创建Schedule
I开头这个很显然是接口
官方提供了实现类StdSchedulerFactory
实例化一个Scheduler以后,Scheduler可以:
Start:开始定时任务,定时触发任务执行
待机:暂停,触发器也不会启动
Shutdown:停止调度器,不会在定时触发执行任务
这里既然专门提到ISchedulerFactory接口,那么我们自己也可以实现这个接口!(TODO:暂时没有应用ISchedulerFactory的需求)
框架核心接口
IScheduler 操作Scheduler的核心api
IJob 业务逻辑所在地!要实现接口的Excute方法
IJobDetail 用来实例化Job的!
ITrigger 一个job可以对应多个trigger,但是一个trigger只能对应一个job!所有trigger都实现该接口。
JobBuilder 用来创建JobDetail实例(JobDetail再创建Job实例)
TriggerBuilder 用来创建Trigger实例。而且我们可以看到示例代码中的方法级联(流式接口)
SchedulerBuilder 用来创建Scheduler实例
Job和JobDetail
Job
定时任务只需要继承IJob就可以了,然后必须要实现Execute方法
Execute方法里面的内容,就是定时任务要执行的业务逻辑!
参考链接:https://blog.csdn.net/woflyoycm/article/details/111300512