Quartz是什么?官网:http://www.quartz-scheduler.org
Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。 Quartz 可以与 J2EE 与 J2SE 应用程序相结合也可以单独使用。 Quartz 允许程序开发人员根据时间的间隔来调度作业。 Quartz 实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联
Quartz.Net 是Quartz 的net实现 ,github:https://github.com/quartznet/quartznet
在项目的开发过程中,难免会遇见后需要后台处理的任务,例如定时发送邮件通知、后台处理耗时的数据处理等,这个时候你就需要Quartz.Net了。 Quartz.Net是纯净的,它是一个.Net程序集,是非常流行的Java作业调度系统Quartz的C#实现。 Quartz.Net一款功能齐全的任务调度系统,从小型应用到大型企业级系统都能适用。功能齐全体现在触发器的多样性上面,即支持简单的定时器,也支持Cron表达式;即能执行重复的作业任务,也支持指定例外的日历;任务也可以是多样性的,只要继承IJob接口即可。 对于小型应用,Quartz.Net可以集成到你的系统中,对于企业级系统,它提供了Routing支持,提供了Group来组织和管理任务,此外还有持久化、插件功能、负载均衡和故障迁移等满足不同应用场景的需要。
实例:
打开vs2017新建一个core的控制台项目,
检查这个core版本是不是2.2,如果不是,可以去https://dotnet.microsoft.com/download/visual-studio-sdks?utm_source=getdotnetsdk&utm_medium=referral
我们先引用Quartz.Net 程序包:
来创建一个Job类HelloQuartzJob:
public class HelloQuartzJob : IJob { public Task Execute(IJobExecutionContext context) { return Task.Factory.StartNew(() => { Console.WriteLine("Hello Quartz.Net"); }); } }
然后在Program.cs里面写这个调度:
static async Task MainAsync() { var schedulerFactory = new StdSchedulerFactory(); var scheduler = await schedulerFactory.GetScheduler(); await scheduler.Start(); Console.WriteLine($"任务调度器已启动"); //创建作业和触发器 var jobDetail = JobBuilder.Create<HelloQuartzJob>().Build(); var trigger = TriggerBuilder.Create() .WithSimpleSchedule(m => { m.WithRepeatCount(3).WithIntervalInSeconds(1); }) .Build(); //添加调度 await scheduler.ScheduleJob(jobDetail, trigger); }
Main需要改一下
static async Task Main(string[] args) { Console.WriteLine("Hello World!"); await MainAsync(); Console.ReadKey(); }
这样运行会报错,打开项目属性,生成,高级,修改语言版本为c#7.1,或c#7.2,或c#7.3
修改之后,没有错误,运行成功: