C#实现定时任务框架Quartz.NET

418 阅读2分钟

一、 Quartz.NET介绍

Quartz.Net是纯净的,它是一个.Net程序集,是非常流行的作业调度系统Quartz的C#实现。

Quartz.Net一款功能齐全的任务调度系统,从小型应用到大型企业级系统都能适用。功能齐全体现在触发器的多样性上面,即支持简单的定时器,也支持Cron表达式;即能执行重复的作业任务,也支持指定例外的日历;任务也可以是多样性的,只要继承IJob接口即可。

对于小型应用,Quartz.Net可以集成到你的系统中,对于企业级系统,它提供了Routing支持,提供了Group来组织和管理任务,此外还有持久化、插件功能、负载均衡和故障迁移等满足不同应用场景的需要。

二、 代码实现

前提:先引入Nuget包(Quartz)

1、创建一个需要定时执行的业务逻辑类QuartzJobService,(注:他需要继承于IJob)

 public class QuartzJobService : IJob
 {
     /// <summary>
     /// 定时任务
     /// </summary>
     /// <param name="context"></param>
     /// <returns></returns>
     public async Task Execute(IJobExecutionContext context)
     {
         await Task.Run(async () =>
         {
             await Console.Out.WriteLineAsync("定时任务逻辑");
         });
     }
 }

2、 创建定时任务配置信息类QuartzJob

public class QuartzJob
{
    /// <summary>
    /// 定时任务初始化
    /// </summary>
    /// <param name="quartzJob"></param>
    /// <param name="factory"></param>
    /// <returns></returns>
    public async void Init()
    {
       //1、创建单元(时间轴/载体)
       StdSchedulerFactory factory = new StdSchedulerFactory();
       IScheduler scheduler = factory.GetScheduler().Result;
       scheduler.Start();//运行单元
  
       //2、创建Job作业
       IJobDetail job = JobBuilder.Create<QuartzJob>()
           .WithIdentity("自定义定时任务作业名称",  "自定义定时任务作业分组") //指定作业名称 和 分组
           .WithDescription("定时任务备注描述") //备注作业描述
           .Build(); //执行作业
  
       //3.1、创建Trigger(时间策略触发器)
       TriggerBuilder triggerBuilder = TriggerBuilder.Create()
           .WithIdentity("自定义定时任务触发器名称", "自定义定时任务触发器分钟")  //指定策略名称 和 分组
           .StartAt(DateTimeOffset.Now.AddSeconds(5))// 首次运行延迟5秒钟
           .WithSimpleSchedule(x =>
               x.WithIntervalInMinutes(Program._Config.TimeSpan)  //之后每隔 second 分钟执行一次
               .RepeatForever()); //无限循环循环
       //3.2、运行时间策略触发器
       ITrigger trigger = triggerBuilder
           .WithDescription("定时任务触发器描述") //策略描述
           .Build(); //执行策略
  
       //5、把时间策略和作业承载到单元上
       await scheduler.ScheduleJob(job, trigger);
    }
}

3、开启定时任务运行

//初始化定时任务
QuartzJob quartzJob = new QuartzJob();
quartzJob.Init();

备注:关于具体的使用方法, 在文档中有详细的介绍:
查看Quartz.NET文档