一、 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文档