定时任务 QuartZ 组件的简单使用
框架:.NET 5.0 控制台
nuget:Quartz(3.3.3)
IScheduler:与调度程序进行交互的主要API。
IJob:由您希望由调度程序执行的组件实现的接口。
IJobDetail:用于定义Jobs的实例。
ITrigger:定义将在其上执行给定Job的计划的组件。
JobBuilder:用于定义/构建JobDetail实例,该实例定义Jobs实例。
TriggerBuilder:用于定义/构建触发器实例。
代码:
class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); Run(); Console.ReadKey(); } /// <summary> /// 任务调度的使用过程 /// </summary> /// <returns></returns> public async static Task Run() { ISchedulerFactory _schedulerFactory = new StdSchedulerFactory(); // 创建 调度器 IScheduler _scheduler = await _schedulerFactory.GetScheduler(); // 开启 调度器 await _scheduler.Start(); // 创建 作业实例 IJobDetail job = JobBuilder.Create<Jobs>() //Jobs即我们需要执行的作业 .WithIdentity("Myjob", "group1") //我们给这个作业取了个"Myjob"的名字,并取了个组名为"group1" .Build(); // 创建 触发器(也叫时间策略) ITrigger trigger = TriggerBuilder.Create() //.WithIdentity("Mytrigger", "group1") .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever()) .Build(); // 将触发器和作业任务绑定到调度器中 await _scheduler.ScheduleJob(job, trigger); } } /// <summary> /// 任务 /// </summary> public class Jobs : IJob { public virtual Task Execute(IJobExecutionContext context) { return Console.Out.WriteLineAsync($"job工作了 在{DateTime.Now}"); } }
实现:
其他实现方式:
1. 使用 System.Timers.Timer 和 System.Threading.Timer 实现定时任务
2. 使用 while 和 sleep 及 Task 实现定时任务
为什么使用 Quartz:
支持更为复杂的时间策略。
参考: