• 任务调度Quartz---拓展使用


    任务调度Quartz---拓展使用

    新建项目,使用管理NuGet程序程序包添加Quartz,核心代码如下:

    #region 测试任务调度Quartz
    
            /// <summary>
            /// 测试任务调度Quartz
            /// </summary>
            public static async Task TestQuartz()
            {
                Console.WriteLine($"测试任务调度Quartz 开始。。。");
                ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
                IScheduler scheduler = await schedulerFactory.GetScheduler();
                //上面2句代码可以使用下面一句代码
                //IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler();
                await scheduler.Start();
                var job = JobBuilder.Create<Myjob>()
                    .WithIdentity("11", "group11")
                    .UsingJobData("123", "哈哈哈啊测试数据。。111111。")//UsingJobData可以存储一些信息
                    .Build();
                var trigger = TriggerBuilder.Create()
                    .WithIdentity("11", "group11")
                    .StartNow()
                    .WithSimpleSchedule(ss => ss.WithInterval(TimeSpan.FromSeconds(2)).RepeatForever())
                    .UsingJobData("123", "哈哈哈啊测试数据。。。")//UsingJobData可以存储一些信息,会覆盖job中UsingJobData相同键值的信息
                    .Build();
                await scheduler.ScheduleJob(job, trigger);
    
    
                var job1 = JobBuilder.Create<Myjob2>()
                   .WithIdentity("22", "group22")
                   .UsingJobData("456", "哈哈哈啊测试数据。。111111。")//UsingJobData可以存储一些信息
                   .Build();
                var trigger1 = TriggerBuilder.Create()
                    .WithIdentity("22", "group22")
                    .StartNow()
                    .WithSimpleSchedule(ss => ss.WithInterval(TimeSpan.FromSeconds(3)).RepeatForever())
                    .UsingJobData("789", "哈哈哈啊测试数据。。。222")//UsingJobData可以存储一些信息,会覆盖job中UsingJobData相同键值的信息
                    .Build();
                await scheduler.ScheduleJob(job1, trigger1);
    
                //拓展
                //去掉提示下划线符号
                //_=  scheduler.GetJobKeys(Quartz.Impl.Matchers.GroupMatcher<JobKey>.GroupContains("group11"));
                //获取所有的分组,根据分组获取所有JobKey,JobKey是Job和Trigger的管理管理对象,可以根据JobKey获取到Job和Trigger的相关信息
                var AllJobKeys = await scheduler.GetJobKeys(Quartz.Impl.Matchers.GroupMatcher<JobKey>.AnyGroup());
                //获取指定分组
                var JobKeys = await scheduler.GetJobKeys(Quartz.Impl.Matchers.GroupMatcher<JobKey>.GroupContains("group11"));
                var firstjobkey = JobKeys.FirstOrDefault();
                var jobDetail = await scheduler.GetJobDetail(firstjobkey);
                var jobDetailTriggers = await scheduler.GetTriggersOfJob(firstjobkey);
                var jobDetailTrigger = jobDetailTriggers.FirstOrDefault();
    
                //Console.WriteLine($"删除触发器{firstjobkey}。。。");
                //删除触发器和定时任务
                //_ = scheduler.DeleteJob(firstjobkey);
                //重新发布
                // _ = scheduler.RescheduleJob(jobDetailTrigger.Key, jobDetailTrigger);
    
                //await scheduler.Start();
            }
    
            public class Myjob : IJob
            {
                public async Task Execute(IJobExecutionContext context)
                {
                    //根据IJobExecutionContext获取到Job和Trigger的相关信息,
                    //同时IJobExecutionContext的MergedJobDataMap可以获取JobDetail和Trigger中的UsingJobData存储的数据信息,
                    //Trigger中的UsingJobData会覆盖job中UsingJobData相同键值的信息
                    Console.WriteLine($"data:{context.JobDetail.Key.Name},{context.JobDetail.Key.Group},{context.MergedJobDataMap.GetString("123")}");
                    Console.WriteLine($"data:{context.Trigger.Key.Name},{context.Trigger.Key.Group},{context.MergedJobDataMap.GetString("123")}");
                    var a = context.JobDetail.JobDataMap;
    
                    await Console.Out.WriteLineAsync($"{DateTime.Now}--Myjob 执行了。。。");
                }
            }
    
            public class Myjob2 : IJob
            {
                public async Task Execute(IJobExecutionContext context)
                {
                    //根据IJobExecutionContext获取到Job和Trigger的相关信息
                    Console.WriteLine($"data:{context.JobDetail.Key.Name},{context.JobDetail.Key.Group},{context.MergedJobDataMap.GetString("123")}");
                    var a = context.JobDetail.JobDataMap;
    
                    await Console.Out.WriteLineAsync($"{DateTime.Now}--Myjob2 执行了。。。");
                }
            }
            #endregion
    龙腾一族至尊龙骑
  • 相关阅读:
    python中删除某个元素的3种方法
    研发团队开源管理工具最佳实践
    Cocos2dx游戏开发系列笔记13:一个横版拳击游戏Demo完结篇
    Sunny谈软件架构
    整理部分JS 控件 WEB前端常用的做成Jsp项目,方便今后直接用
    hdu3033I love sneakers! (分组背包,错了很多次)
    Using关键字的用法
    Android webViewj简单处理apk的下载链接
    山寨腾讯“爱消除”游戏之菜单特效
    Apache与Nginx优缺点比较
  • 原文地址:https://www.cnblogs.com/1175429393wljblog/p/15044181.html
Copyright © 2020-2023  润新知