一、简单介绍
Quartz.NET是一个强大、开源、轻量的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于WinForm和ASP.NET应用中。它灵活而不复杂,可以为执行一个作业而创建简单或复杂的作业调度。它有很多特征,如:数据库支持、集群、插件、支持cron-like表达式等等。
官网:http://www.quartz-scheduler.net/
源码:https://github.com/quartznet/quartznet
示例:http://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html
二、概念解释
Scheduler:作业调度器。
IJob:作业接口,继承并实现Execute, 编写执行的具体作业逻辑。
JobBuilder:根据设置,生成一个详细作业信息(JobDetail)。
TriggerBuilder:根据规则,生产对应的Trigger。
三、示例程序
3.1、界面
新建一个WinForm程序Client,项目右键->属性->应用程序->输出类型,选择控制台应用程序。
3.2、引用
项目右键->管理 NuGet 程序包->Quartz.NET。
3.2、作业
新建一个类DataSyncJob并继承IJob,代表它是一个作业,同时实现Execute方法。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Quartz; namespace LinkTo.Test.Quartz.Client { //打上DisallowConcurrentExecution标签让Job进行单线程跑,避免没跑完时的重复执行。 [DisallowConcurrentExecution] public class DataSyncJob : IJob { public Task Execute(IJobExecutionContext context) { JobDataMap keyValuePairs = context.MergedJobDataMap; if (keyValuePairs.Count > 0 && keyValuePairs.Contains("Hello")) { string value = context.MergedJobDataMap.Get("Hello").ToString(); return Task.Run(() => { Console.WriteLine(DateTime.Now + $" Hello:{value}" + Environment.NewLine); }); } else { return Task.Run(() => { Console.WriteLine(DateTime.Now + Environment.NewLine); }); } } } }