- Nuget引入程序包 QuartZ
- 三大核心对象 IScheduler:时间轴 单元 盒子 在这里进行任务配置 IJobDetail:描述具体做什么事情,定时任务执行的动作 ITrigger:时间策略,按照什么频率来执行
- 传参数:jobDetail.JobDataMap.Add 传参数 trigger.JobDataMap.Add 传参数 注意: context.MergedJobDataMap 会去掉重复 以后者为准 获取参数严格区分大小写 链式传参:
基础代码如下
1:执行代码
#region Scheduler
StdSchedulerFactory factory = new StdSchedulerFactory();
IScheduler scheduler = await factory.GetScheduler();
await scheduler.Start();
#endregion
#region JobDetail
IJobDetail jobDetail = JobBuilder.Create<SendMessage>()
.WithIdentity("sendJob", "group1")
.WithDescription("This is sendJob")
.Build();
jobDetail.JobDataMap.Add("Student1", "参数一");
jobDetail.JobDataMap.Add("Student2", "参数二");
jobDetail.JobDataMap.Add("Student3", "参数三");
jobDetail.JobDataMap.Add("Student4", "参数四");
jobDetail.JobDataMap.Add("Year", DateTime.Now.Year);
#endregion
#region trigger
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("sendTrigger", "group1")
.StartNow()
.WithCronSchedule("* * * * * ?")
.WithDescription("This is sendJob's sendTrigger")
.Build();
trigger.JobDataMap.Add("Student5", "时间参数5");
trigger.JobDataMap.Add("Student6", "时间参数6");
trigger.JobDataMap.Add("Student7", "时间参数7");
trigger.JobDataMap.Add("Student8", "时间参数8");
trigger.JobDataMap.Add("Year", DateTime.Now.Year + 1);
#endregion
await scheduler.ScheduleJob(jobDetail, trigger);
2:任务代码
[PersistJobDataAfterExecution]
[DisallowConcurrentExecution]
public class SendMessage : IJob
{
public SendMessage()
{
Console.WriteLine("SendMessage 被构造");
}
public async Task Execute(IJobExecutionContext context)
{
await Task.Run(() =>
{
Console.WriteLine();
Console.WriteLine("**********************************************");
JobDataMap jobDetailMap = context.JobDetail.JobDataMap;
Console.WriteLine($"{jobDetailMap.Get("Student1")}同学:准备开始上课了!{DateTime.Now}");
Console.WriteLine($"{jobDetailMap.Get("Student2")}同学:准备开始上课了!{DateTime.Now}");
Console.WriteLine($"{jobDetailMap.Get("Student3")}同学:准备开始上课了!{DateTime.Now}");
Console.WriteLine($"{jobDetailMap.Get("Student4")}同学:准备开始上课了!{DateTime.Now}");
Console.WriteLine($"{jobDetailMap.Get("Year")}");
jobDetailMap.Put("Year", jobDetailMap.GetInt("Year") + 1);
Console.WriteLine($"{jobDetailMap.Get("Student4")}同学:准备开始上课了!{DateTime.Now}");
JobDataMap triggerMap = context.Trigger.JobDataMap;
Console.WriteLine();
Console.WriteLine($"{triggerMap.Get("Student5")}同学:第二次提示:准备开始上课了!{DateTime.Now}");
Console.WriteLine($"{triggerMap.Get("Student6")}同学:第二次提示:准备开始上课了!{DateTime.Now}");
Console.WriteLine($"{triggerMap.Get("Student7")}同学:第二次提示:准备开始上课了!{DateTime.Now}");
Console.WriteLine($"{triggerMap.Get("Student8")}同学:第二次提示:准备开始上课了!{DateTime.Now}");
Console.WriteLine($"{triggerMap.Get("Year")}");
Console.WriteLine("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
Console.WriteLine(context.MergedJobDataMap.Get("Year"));
Console.WriteLine("**********************************************");
Console.WriteLine();
});
}
}