您的位置:首页 > 其它

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

2018-01-10 00:00 525 查看

安装

下载。https://sourceforge.net/projects/quartznet/files/quartznet/

找到动态库

Common.Logging.Core.dll

Common.Logging.dll

Quartz.dll

引入到项目

一直执行

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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  .Net