• Quartz C# 官方示例 任务调度插件


    十年河东,十年河西,莫欺少年穷

    学无止境,精益求精

    先来点干货,每五秒执行一次

    1、程序入口

        class Program
        {
            static void Main(string[] args)
            {
                Task.Run(() => { JobManager.RunSche().GetAwaiter().GetResult(); });
                Console.ReadKey();
            }
        }

    2、触发器注册

    using Quartz;
    using Quartz.Impl;
    using Quartz.Impl.Matchers;
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace CabinetElectricExe
    {
        public class JobManager
        {
            private static IScheduler scheduler;
            public static async Task RunSche()
            {
                try
                {
                    Console.WriteLine("ServiceStart");
                    StdSchedulerFactory factory = new StdSchedulerFactory();
                    scheduler = await factory.GetScheduler();
                    await JobSchedule<JobCenter>.ScheduleDayJob(scheduler);
                    await scheduler.Start();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("jobinitException");
                   // Log.Inst.Info($"jobinitException:{ex.ToString()}");
                }
    
            }
    
            public static async Task<string> Monitor()
            {
                var groups = await scheduler.GetJobGroupNames();
                var jobstring = new StringBuilder();
                foreach (var item in groups)
                {
                    var jobkeys = await scheduler.GetJobKeys(GroupMatcher<JobKey>.GroupEquals(item));
                    foreach (var jobkey in jobkeys)
                    {
                        string jobName = jobkey.Name;
                        string jobGroup = jobkey.Group;
                        var job = await scheduler.GetJobDetail(jobkey);
                        var triggers = await scheduler.GetTriggersOfJob(jobkey);
    
                        foreach (ITrigger trigger in triggers)
                        {
                            dynamic trg = trigger;
                            TriggerKey triggerKey = new TriggerKey(trg.Name, trg.Group);
                            TriggerState x = scheduler.GetTriggerState(triggerKey).Result;
                            var lastTime = trigger.GetPreviousFireTimeUtc().GetValueOrDefault().ToString("yyyy-MM-dd HH:mm:ss");
                            var nextTime = trigger.GetNextFireTimeUtc().GetValueOrDefault().ToString("yyyy-MM-dd HH:mm:ss");
                            jobstring.AppendFormat($@"状态:{ x.ToString()},上次执行时间:{lastTime},下次执行时间:{nextTime},job:{jobName},group:{jobGroup};");
                        }
                    }
                }
                return jobstring.ToString();
            }
        }
    }
    View Code

    3、触发器注册,执行函数

    using Quartz;
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading.Tasks;
    using static Quartz.MisfireInstruction;
    
    namespace CabinetElectricExe
    {
        public class JobCenter : IJob
        {
            public JobCenter()
            {
            }
    
            /// <summary>
            /// 调用入口
            /// </summary>
            /// <param name="context"></param>
            /// <returns></returns>
            public async Task Execute(IJobExecutionContext context)
            {
                //HttpHelper.Post($"{CommonConfig.PMPath}job/excute", "");
                Console.WriteLine("执行了一次");
            }
        }
    
        public class JobSchedule<T> where T : IJob
        {
            /// <summary>
            /// 注册一个执行服务【定义他的频率,执行时间等,参考】
            /// </summary>
            /// <param name="scheduler"></param>
            /// <returns></returns>
            public static async Task ScheduleDayJob(IScheduler scheduler)
            {
    
                var jobName = "CabinetElectricExe";
                IJobDetail job = JobBuilder.Create<T>()
                  .WithIdentity($"{jobName}Job", $"{jobName}Group")
                  .Build();
    
                ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity($"{jobName}Trigger", $"{jobName}Group")
                    .StartAt(DateTime.Now.AddSeconds(5)) //启动间隔
                    //.StartNow()
                    .WithSimpleSchedule(x => x
                       .WithIntervalInSeconds(5) //等待间隔
                       .RepeatForever())
                    .Build();
    
                var st = await scheduler.ScheduleJob(job, trigger);
         
                
            }
        }
    }
    View Code

    最后,官方示例下载链接:https://files.cnblogs.com/files/chenwolong/Quartz.NET-2.3.2.zip   【CSDN花了60积分搞下来的,分享出去了,喜欢就点个赞】

    @天才卧龙的伯乐

  • 相关阅读:
    利用Python中SocketServer 实现客户端与服务器间非阻塞通信
    Redis单机配置多实例,实现主从同步
    Django(一) 安装使用基础
    数组模拟环形队列
    单链表原理及应用举例
    中缀表达式转换为后缀表达式(思路)
    中缀表达式转后缀表达式(代码实现)及前缀表达式思路补充
    数组模拟栈(Stack)
    双向链表原理及应用举例
    单向环形链表
  • 原文地址:https://www.cnblogs.com/chenwolong/p/Quartz.html
Copyright © 2020-2023  润新知