zoukankan      html  css  js  c++  java
  • 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积分搞下来的,分享出去了,喜欢就点个赞】

    @天才卧龙的伯乐

  • 相关阅读:
    如何用C++操作无线网卡开启共享热点WiFi?
    delphi中的copy函数和pos函数
    C#使用WinAPI 修改电源设置,临时禁止笔记本合上盖子时睡眠(使用PowerGetActiveScheme等函数,以及C#对WINAPI的调用)
    发布Qt Widgets桌面应用程序的方法(自定义进程步骤,用QT Creator直接生成)
    认识TDD
    基于Bootstrap的Asp.net Mvc 分页
    Chrome控制台 JS调试
    英语学习
    JavaScript中的作用域和声明提前
    LeetCode: Distinct Subsequences
  • 原文地址:https://www.cnblogs.com/chenwolong/p/Quartz.html
Copyright © 2011-2022 走看看