以前就了解了Quartz这个定时框架,但是一直没有认真的去关注他,最近忽然看到已经更新到3.0.4支持异步操作了所以就写个简单的小例子看看好用不。
第一步:创建项目
创建一个新项目,可以是ASP.NET MVC,WebForms,Winforms等多种.Net项目,这里使用的是VS2017,创建了一个MVC项目
创建完成后大致项目层级为:
第二部:引用
我们首先要在项目中引用Quartz.dll。
你可以去官网现在dll:https://github.com/quartznet/quartznet
也可以使用nuget管理直接在项目安装:
Install-Package Quartz
输入安装命令后出现即安装成功:
然后在引用可以看到该dll:
第三步:创建任务
我们添加一个任务类然后实现IJob接口:
1 public class HelloJob : IJob 2 { 3 public Task Execute(IJobExecutionContext context) 4 { 5 System.Diagnostics.Debug.WriteLine("HelloWord"); 6 return Task.FromResult(true); 7 } 8 }
千万不要忘记引用命名空间哦:
using Quartz;
using System.Threading.Tasks;
第四步:创建触发器
我这里用了一个触发器接口类。直接上代码,代码理由详情注释我就不啰嗦了。
public class SimpleExample : IExample { public virtual async Task Run() { //创建调度器 ISchedulerFactory sf = new StdSchedulerFactory(); IScheduler sched = await sf.GetScheduler(); //创建任务 IJobDetail job = JobBuilder.Create<HelloJob>() .WithIdentity("job1", "group1") .Build(); //创建触发器 // DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);//定义触发规则 ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trg1", "group1") // .StartAt(runTime) .WithCronSchedule("0/5 * * * * ?") //5秒执行一次 .Build(); //将任务与触发器添加到调度器中 await sched.ScheduleJob(job, trigger); //启动任务 await sched.Start(); } }
第五步:也是最后一步
我们只需要调用运行就行了,我因为是试一试能不能运行,所有我直接写在了Global.asax文件的Application_Start方法里:
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); IExample example = ObjectUtils.InstantiateType<IExample>(typeof(SimpleExample)); example.Run().ConfigureAwait(false); }
最后看一下结果吧:我设置在输出台打印“HelloWord” 每隔5秒
好了以上就是Quartz的基本实现。