C# 定时任务之Quartz.Net

        上一篇写到的使用windows任务计划程序来实现定时任务,但这种方式在开发过程中不是太灵活,很难满足我们时需时用;所以我们如果能在代码中来实现的话就会比较得心应手;

所以这篇来简单介绍下Quartz.Net这个任务调度系统的使用方式。

实现功能:

使用Quartz.Net实现定时、定点触发

开发环境:

开发工具: Visual Studio 2013

.NET Framework版本:4.5

实现代码:

//首先需要先去从nuget下载Quartz引用到我们的项目
//实现IInterruptableJob接口,实现我们需要操作的逻辑
public class MyJob : IInterruptableJob
    {
        public void Execute(IJobExecutionContext context)
        {
            JobDataMap dataMap = context.JobDetail.JobDataMap;
            string tag = dataMap.GetString("tag");
            Form1.form1.AddText(tag+"-------"+DateTime.Now);
        }
        public void Interrupt()
        {
            throw new NotImplementedException();
        }
    }
    public static void StartJob()
        {
            //创建任务调度器
            ISchedulerFactory schedulefactory = new StdSchedulerFactory();
            IScheduler scheduler = schedulefactory.GetScheduler();
            //启动任务调度器
            scheduler.Start();

            //创建任务作业

            //指定时间触发
            IJobDetail jobDetail = JobBuilder.Create<MyJob>().UsingJobData("tag", "jobDetail").Build();

            //间隔时间触发
            IJobDetail jobDetail2 = JobBuilder.Create<MyJob>().UsingJobData("tag", "jobDetail2").Build();

            //创建触发器
            DateTime dt = DateTime.Now.AddSeconds(10);

            //指定时间触发
            //表达式含义可参考:http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontrigger.html
            string t = string.Join(" ", dt.Second, dt.Minute, dt.Hour, dt.Day, dt.Month, "?", dt.Year);

            var cronTrigger = TriggerBuilder.Create()
                 .WithSchedule(CronScheduleBuilder.CronSchedule(t).InTimeZone(TimeZoneInfo.Local))
                .Build();

            //间隔时间段触发
            //WithRepeatCount表示重复的次数,第一次执行不算重复次数,所以最终执行次数为设置的重复次数+1
            var cronTrigger2 =TriggerBuilder.Create()
                .WithSimpleSchedule(s => s.WithIntervalInSeconds(4).WithRepeatCount(3)).Build();


            IDictionary<IJobDetail, Quartz.Collection.ISet<ITrigger>> dic = new Dictionary<IJobDetail, Quartz.Collection.ISet<ITrigger>>();
            dic.Add(jobDetail, new Quartz.Collection.HashSet<ITrigger> { cronTrigger });
            dic.Add(jobDetail2, new Quartz.Collection.HashSet<ITrigger> { cronTrigger2 });

            //把作业,触发器加入调度器
            scheduler.ScheduleJobs(dic, true);
        }

//最后调用StartJob方法即可
 private void btnQuartz_Click(object sender, EventArgs e)
        {
            StartJob();
        }

实现效果:

我这里用winform来做这个测试,当然我认为这并不太合适。

此篇只是介绍了下Quartz.Net简单的使用方法,还有其他更高级的功能大家可以去官网自行学习。

由简入繁,拿来即用

更多精彩,请搜索公众号:Csharp 小记

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值