Quartz.NET是一个强大、开源、轻量的作业调度框架。能够用它来为执行一个作业而创建简单的或复杂的作业调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。
官网:http://www.quartz-scheduler.net/
一、使用Nuget安装Quartz.NET
二、应用示例
让应用程序每隔5秒钟向C:Quartz.txt文件中记录当前时间。
这是一个Web应用,我想让网站一启动时就开始该项工作,这里我们需要打开Global.asax.cs,将代码写在Application_Start方法中。
1. 定义一个任务类,实现Quartz.IJob接口,实现Execute方法
using Quartz;
public class TimeJob : IJob { public void Execute(IJobExecutionContext context) { //向c:Quartz.txt写入当前时间并换行 System.IO.File.AppendAllText(@"c:Quartz.txt", DateTime.Now+Environment.NewLine); } }
2.创建一个调度器。调度器负责管理与控制任务的执行。
在Global.asax.cs文件中声明变量,
//调度器 IScheduler scheduler; //调度器工厂 ISchedulerFactory factory;
在Application_Start()方法中添加如下代码:
//创建一个调度器 factory = new StdSchedulerFactory(); scheduler = factory.GetScheduler(); scheduler.Start();
3. 创建一个任务对象。
这个任务对象就是我们将要执行的工作,job1是名称,group1是组名。在Application_Start()方法中添加如下代码:
//2、创建一个任务 IJobDetail job = JobBuilder.Create<TimeJob>().WithIdentity("job1", "group1").Build();
4.创建一个触发器。
触发器定义了什么时间任务开始或每隔多久执行一次。在Application_Start()方法中添加如下代码:
//3、创建一个触发器 //DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow); ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .WithCronSchedule("0/5 * * * * ?") //5秒执行一次 //.StartAt(runTime) .Build();
5.将任务与触发器添加到调度器中并执行。在Application_Start()方法中添加如下代码:
//4、将任务与触发器添加到调度器中 scheduler.ScheduleJob(job, trigger); //5、开始执行 scheduler.Start();
6. 应用关闭时结束任务。
Shutdown方法中的参数true的意思为:是否等待任务的完成再结束。在Global.asax.cs中的Application_End()方法中添加如下代码:
// 在应用程序关闭时运行的代码 if (scheduler != null) { scheduler.Shutdown(true); }