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();