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

posted @ 2022-09-15 11:09  ZerryLuo  阅读(318)  评论(0编辑  收藏  举报