Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。 Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。
OK,我们来做个简单的例子:
首先,通过NuGet安装Quartz.NET
示例代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; //引入命名空间 using Quartz; using Quartz.Impl; namespace QuartzDemo { class Program { static void Main(string[] args) { //初始化调度器 ISchedulerFactory schedFact = new StdSchedulerFactory(); var scheduler = schedFact.GetScheduler(); //启动调度器 scheduler.Start(); //初始化要执行的任务 var testJob = JobBuilder.Create<MessageLoadJob>().WithDescription("Job description").Build(); //传入参数到任务中 testJob.JobDataMap.Add("ParamKey", "ParamValue"); //初始化任务的触发器(CronTrigger) ITrigger cronTrigger = TriggerBuilder.Create() .WithIdentity(Guid.NewGuid().ToString()) .WithDescription("Trigger description") //0秒开始每五秒执行一次 .WithCronSchedule("0/5 * * * * ? *") .Build(); //初始化任务的触发器(SimpleTrigger) var simpleTrigger = TriggerBuilder.Create() .StartAt(DateTime.Now) .EndAt(DateTime.Now.AddDays(5)) //每三秒执行一次 .WithSimpleSchedule(c =>
c.WithIntervalInSeconds(3)
//.RepeatForever()
.WithMisfireHandlingInstructionNextWithRemainingCount()
) .Build(); //将任务添加到调度器中 scheduler.ScheduleJob(testJob, cronTrigger); //scheduler.ScheduleJob(testJob, simpleTrigger); Console.Read(); } } //此属性防止任务并行 [DisallowConcurrentExecution] public class MessageLoadJob : IJob { public void Execute(IJobExecutionContext context) { var jobDataMap = context.JobDetail.JobDataMap; var paramValue = jobDataMap["ParamKey"] as string; Console.WriteLine(string.Format("{0} {1}", paramValue, DateTime.Now)); } } }
建议使用CronTrigger表达式定义触发器,灵活性比较高。
好文推荐:http://www.cnblogs.com/knowledgesea/category/719995.html