基础使用
首先需要在项目中引入 Quartz.NET 的 NuGet 程序包,这是构建定时任务的基础。
Quartz.NET 的核心架构围绕三个主要接口展开,理解它们的关系是配置任务的关键:
- IScheduler:相当于时间轴的容器,负责管理所有的任务和触发器。你可以把它想象成一个盒子,里面装着具体的执行单元。
- IJobDetail:描述具体做什么事情。它定义了定时任务执行的动作,即实际的业务逻辑载体。
- ITrigger:定义时间策略。它决定了按照什么频率、在什么时间点来执行任务。
参数传递机制
在任务执行过程中,经常需要传递上下文参数。Quartz 提供了两种 Map 用于传参:
jobDetail.JobDataMap.Add:绑定到作业本身的参数。trigger.JobDataMap.Add:绑定到触发器的参数。
注意,当两者同时存在时,context.MergedJobDataMap 会进行合并处理。如果键名重复,以后者为准。此外,获取参数时严格区分大小写,链式传参时需留意这一点。
代码实现
下面是一个完整的初始化示例,展示了如何启动调度器并注册一个简单的任务。这里我们直接实例化工厂来获取调度器,然后定义作业和触发器。
#region Scheduler Initialization
var factory = new StdSchedulerFactory();
var scheduler = await factory.GetScheduler();
await scheduler.Start();
#endregion
// 定义任务详情
var jobKey = new JobKey("MyJob");
var jobDetail = JobBuilder.Create<MyJob>()
.WithIdentity(jobKey)
.Build();
// 定义触发器
var trigger = TriggerBuilder.Create()
.WithIdentity("MyTrigger")
.StartNow()
.WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever())
.Build();
// 注册任务
await scheduler.ScheduleJob(jobDetail, trigger);
在实际运行中,确保你的 MyJob 类实现了 IJob 接口,并在 Execute 方法中处理业务逻辑。这样,调度器就会按照设定的频率自动调用你的代码。


