Quartz初体验

Quartz用于定时任务。当我们想周期性的执行某一个任务的时候,使用Quartz就会比较便捷

首先需要引用Quartz

首先声明任务管理类。里面包含了时间轴,作业(做什么任务)以及实践策略(周期次数等)

public async static Task Init()
        {
            #region  创建单元(时间轴)
            StdSchedulerFactory factory = new StdSchedulerFactory();
            IScheduler scheduler=await factory.GetScheduler();
            await scheduler.Start();
            #endregion

            #region 生成作业描述(做什么)
            IJobDetail job=JobBuilder.Create<SendMessageJob>()
                .WithIdentity("sendMessageJob", "group1")   //分组
                .WithDescription("this is message job")      //作业描述
                .Build();
            #endregion

            #region 实践策略(重复间隔、次数)
            ITrigger trigger=TriggerBuilder.Create()
                .WithIdentity("sendMessageJob", "group1")  //分组
                // .StartNow()   //马上执行一次
                .WithSimpleSchedule(w => w.WithIntervalInSeconds(5).WithRepeatCount(3))   //每5秒重复一次。最多重复4次。想要一直执行的话,使用RepeatForever()
                .Build();
            #endregion 

            //将时间策略和作业承载到单元上
            await scheduler.ScheduleJob(job, trigger);
        }

其中SendMessageJob是我们自定义的任务,也就是我们周期性执行的行为。它需要继承于IJob接口

public class SendMessageJob : IJob
    {
        /// <summary>
        /// 当前Task内部需要执行的任务
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task Execute(IJobExecutionContext context)
        {
            await Task.Run(() =>
            {
                Console.WriteLine("*******************************");
                Console.WriteLine($"起床了!{DateTime.Now}");
                Console.WriteLine("*******************************");
                Console.WriteLine();
            });
        }
    }

最后进行任务调用

DispatchingManager.Init().GetAwaiter().GetResult();
记录编程的点滴,体会学习的乐趣
原文地址:https://www.cnblogs.com/AduBlog/p/14783229.html