以前就了解了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接口:
public class HelloJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
System.Diagnostics.Debug.WriteLine("HelloWord");
return Task.FromResult(true);
}
}
千万不要忘记引用命名空间哦:
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的基本实现。