本文链接
下面的代码对应这个项目看
三个对象
1.IScheduler
2.IJobDetail
3.ITrigger
第一步,选创建一个任务单元(修建火车道)
#region 创建单元 (时间轴/载体) StdSchedulerFactory factory = new StdSchedulerFactory(); IScheduler scheduler = await factory.GetScheduler(); await scheduler.Start(); #endregion
第二步,创建一个任务(造火车)
#region job IJobDetail jobDetail = JobBuilder.Create<HelloJob>() .WithDescription("this is a job") .WithIdentity("job1", "group1") .Build(); #endregion
WithIdentity():
第一个参数(job1):给当前任务起个名字(行动代号)
第二个参数(group1):分组,因为这个任务可以是多个,也可以是多组,分类一下
HelloJob.cs
using Quartz; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DayWorkCloseService.DayWorkClose { public class HelloJob : IJob { public async Task Execute(IJobExecutionContext context) { await Task.Run(() => { Console.WriteLine($@"{"张翼德"}"+DateTime.Now + ""); }); } } }
第三步 配置时间策略(确定发车时间)
#region 时间策略 ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(1) .WithRepeatCount(10000)) .Build(); #endregion
WithIdentity():同上
startNow():立即开始一次
WithIntervalInSeconds():一秒一次
WithRepeatCount():最大执行10000次
4. 把任务和时间策略承载到任务单元中 (喝壮行酒,准备上路)
await scheduler.ScheduleJob(jobDetail, trigger);
完整的代码 这个是我新建了一个类库,调用不在这里
using DayWorkCloseService.DayWorkClose; using Quartz; using Quartz.Impl; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DayWorkCloseService { public class DayWorkCloseManager { public static async Task Init() { try { #region 创建单元 (时间轴/载体) StdSchedulerFactory factory = new StdSchedulerFactory(); IScheduler scheduler = await factory.GetScheduler(); await scheduler.Start(); #endregion #region job IJobDetail jobDetail = JobBuilder.Create<HelloJob>() .WithDescription("this is a job") .WithIdentity("job1", "group1") .Build(); #endregion #region 时间策略 ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(1) .WithRepeatCount(10000)) .Build(); #endregion // Tell quartz to schedule the job using our trigger await scheduler.ScheduleJob(jobDetail, trigger); } catch (SchedulerException se) { Console.WriteLine(se); } } } }
准备都做完了,现在开始调用,就一句话,不对,两句
DayWorkCloseManager.Init().GetAwaiter().GetResult();
Console.Read();//这个一定要
done