Quartz.NET是一款功能齐全的开源作业调度框架,小至的应用程序,大到企业系统都可以适用。Quartz是作者James House用JAVA语言编写的,而Quartz.NET是从Quartz移植过来的C#版本。**
private void SendKCQ()
{
// 构造一个调度程序工厂
ISchedulerFactory schedFact = new StdSchedulerFactory();
// 得到一个调度器
IScheduler sched = schedFact.GetScheduler();
sched.Start();
// 定义作业并将其绑定到HelloJob类
IJobDetail job = JobBuilder.Create<SendKCoJob>()
.WithIdentity("myJob", "group1")
.Build();
// 现在触发作业运行,然后每600秒触发一次
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("myTrigger", "group1")
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(60)
.RepeatForever())
.Build();
// 5.使用trigger规划执行任务job
sched.ScheduleJob(job, trigger);
}
1、有几个重要类和概念需要了解一下:
IScheduler - 与调度器交互的主要API. IJob -由执行任务实现的接口。 IJobDetail - 定义Job实例
ITrigger - 按照定义的时间让任务执行的组件. JobBuilder - 用于定义或者创建JobDetai
TriggerBuilder -用于定义或生成触发器实例
2、触发器类型 一共有4种:
WithCalendarIntervalSchedule
WithCronSchedule
WithDailyTimeIntervalSchedule
WithSimpleSchedule
在项目中使用的是WithCronSchedule,因为cron表达式更加灵活、方便。
3、Quartz轮训任务,需要配置一个参数,这个参数来控制Job任务是否并行,默认情况是并发执行的,如果是采用顺序执行,才可以执行下一次的任务,配置如下:
情况如下:假设一个任务每5分钟执行一次,本次的任务还没有执行完,然后就到了下一次的执行的时间,这种情况是继续执行新开的任务,不会等待。
如果想等待本次任务执行完才可以执行下次任务可以添加[DisallowConcurrentExecution]标记