Quartz.Net 任务调度之简单任务(1)

本文链接

https://github.com/sunshuaize/cnBlogDemos/tree/master/Quartz.Net%20%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6%E4%B9%8B%E7%AE%80%E5%8D%95%E4%BB%BB%E5%8A%A1(1)/DayWorkClose

下面的代码对应这个项目看

三个对象

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

猜你喜欢

转载自www.cnblogs.com/mi21/p/12084703.html