c# 任务调度篇QuartZ(第一部分:基础的使用)

  1. Nuget引入程序包 QuartZ
  2. 三大核心对象 IScheduler:时间轴 单元 盒子 在这里进行任务配置 IJobDetail:描述具体做什么事情,定时任务执行的动作 ITrigger:时间策略,按照什么频率来执行
  3. 传参数: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>()//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("* * * * * ?")//cron表达式
       .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//必须继承IJob
    {

        //private static object obj = new object(); //定义一个静态变量也可以实现 执行后可以保留执行结果

        public SendMessage()
        {
            Console.WriteLine("SendMessage 被构造");
        }

        public async Task Execute(IJobExecutionContext context) //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();
            });
        }
    }
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页