《.Net框架 系列》- 作业调度框架Quartz.Net

安装

  1. 下载。https://sourceforge.net/projects/quartznet/files/quartznet/
  2. 找到动态库
    1. Common.Logging.Core.dll
    2. Common.Logging.dll
    3. Quartz.dll
  3. 引入到项目

一直执行

JobDemo.cs

public class JobDemo : IJob
{
    /// <summary>
    /// 这里是作业调度每次定时执行的方法
    /// </summary>
    /// <param name="context"></param>
    public void Execute(IJobExecutionContext context)
    {
        Console.WriteLine(DateTime.Now.ToString("r"));
    }
}

Program.cs

static void Main(string[] args)
{
    /*
        下面代码执行结果是,
        每三秒执行一次JobDemo中的Execute,如果程序不停止,无休无止执行
    */

    //1.0创建一个作业调度池
    ISchedulerFactory factory = new StdSchedulerFactory();
    IScheduler _scheduler = factory.GetScheduler();
    //2.0创建出一个具体的作业
    IJobDetail job = JobBuilder.Create<JobDemo>().Build();
    //3.0创建并配置一个触发器
    ISimpleTrigger trigger =
        (ISimpleTrigger)
            TriggerBuilder.Create()
                .WithSimpleSchedule(x => x.WithIntervalInSeconds(3).WithRepeatCount(int.MaxValue))
                .Build();
    //4.0加入作业调度池中
    _scheduler.ScheduleJob(job, trigger);
    //5.0开始运行
    _scheduler.Start();
    Console.ReadKey();
}

定时执行

在每小时的第10,20,25,26,33,54分钟,每分钟的第1,10,14秒执行一次。那么上面显然是不能满足的。这是我就把cron-like表达式引入进来,以实现各种时间纬度的调用

Program.cs

static void Main(string[] args)
{
    //1.首先创建一个作业调度池
    ISchedulerFactory factory = new StdSchedulerFactory();
    IScheduler _scheduler = factory.GetScheduler();
    //2.创建出一个具体的作业
    IJobDetail job = JobBuilder.Create<JobDemo>().Build();
    //NextGivenSecondDate:如果第一个参数为null则表示当前时间往后推迟2秒的时间点
    DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddSeconds(1), 2);
    DateTimeOffset endTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddYears(2), 3);
    //3.创建并配置一个触发器
    ICronTrigger trigger =
        (ICronTrigger)
            TriggerBuilder.Create()
                .StartAt(startTime)
                .EndAt(endTime)
                .WithCronSchedule("1,10,14 10,20,25,26,33,54 * * * ?").Build();
    //4.加入作业调度池
    _scheduler.ScheduleJob(job, trigger);
    //5.开始执行
    _scheduler.Start();
    //挂起2天
    Thread.Sleep(TimeSpan.FromDays(2));
    //2天后关闭作业调度,讲不在执行
    _scheduler.Shutdown();
    Console.ReadKey();
}

转载于:https://my.oschina.net/kimisme/blog/1604841

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值