【Quartz】定时器初步实验(一)

原文:【Quartz】定时器初步实验(一)

    以前就了解了Quartz这个定时框架,但是一直没有认真的去关注他,最近忽然看到已经更新到3.0.4支持异步操作了所以就写个简单的小例子看看好用不。

第一步:创建项目

创建一个新项目,可以是ASP.NET MVC,WebForms,Winforms等多种.Net项目,这里使用的是VS2017,创建了一个MVC项目

 【Quartz】定时器初步实验(一)

 

创建完成后大致项目层级为:

 【Quartz】定时器初步实验(一)

 

第二部:引用

我们首先要在项目中引用Quartz.dll。

你可以去官网现在dll:https://github.com/quartznet/quartznet

也可以使用nuget管理直接在项目安装:

Install-Package Quartz

输入安装命令后出现即安装成功:

 【Quartz】定时器初步实验(一)

 

然后在引用可以看到该dll:

 【Quartz】定时器初步实验(一)

第三步:创建任务

我们添加一个任务类然后实现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】定时器初步实验(一)

好了以上就是Quartz的基本实现。

 

上一篇:Sciter - 多平台嵌入式 HTML/CSS/脚本 UI 引擎


下一篇:Windows下Apache中配置虚拟主机