zoukankan      html  css  js  c++  java
  • Quartz.NET基础入门

    Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。 Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。

    OK,我们来做个简单的例子:

    首先,通过NuGet安装Quartz.NET

    示例代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    //引入命名空间
    using Quartz;
    using Quartz.Impl;
    
    namespace QuartzDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                //初始化调度器
                ISchedulerFactory schedFact = new StdSchedulerFactory();
                var scheduler = schedFact.GetScheduler();
                //启动调度器
                scheduler.Start();
    
                //初始化要执行的任务
                var testJob = JobBuilder.Create<MessageLoadJob>().WithDescription("Job description").Build();
                //传入参数到任务中
                testJob.JobDataMap.Add("ParamKey", "ParamValue");
    
                //初始化任务的触发器(CronTrigger)
                ITrigger cronTrigger = TriggerBuilder.Create()
                    .WithIdentity(Guid.NewGuid().ToString())
                    .WithDescription("Trigger description")
                    //0秒开始每五秒执行一次
                    .WithCronSchedule("0/5 * * * * ? *")
                    .Build();
    
                //初始化任务的触发器(SimpleTrigger)
                var simpleTrigger = TriggerBuilder.Create()
                    .StartAt(DateTime.Now)
                    .EndAt(DateTime.Now.AddDays(5))
                    //每三秒执行一次
                    .WithSimpleSchedule(c => 
                c.WithIntervalInSeconds(3)
                //.RepeatForever()
                .WithMisfireHandlingInstructionNextWithRemainingCount()
              ) .Build();
    //将任务添加到调度器中 scheduler.ScheduleJob(testJob, cronTrigger); //scheduler.ScheduleJob(testJob, simpleTrigger); Console.Read(); } } //此属性防止任务并行 [DisallowConcurrentExecution] public class MessageLoadJob : IJob { public void Execute(IJobExecutionContext context) { var jobDataMap = context.JobDetail.JobDataMap; var paramValue = jobDataMap["ParamKey"] as string; Console.WriteLine(string.Format("{0} {1}", paramValue, DateTime.Now)); } } }

    建议使用CronTrigger表达式定义触发器,灵活性比较高。

    好文推荐:http://www.cnblogs.com/knowledgesea/category/719995.html

  • 相关阅读:
    网站推荐:11个相似图片搜索网站(以图找图)
    逻辑回归
    关于估计、偏差以及方差
    算法面试问题集锦
    sql语句执行顺序
    五大算法之动态规划
    五大算法之回溯算法
    操作系统问题总结之处理机调度
    操作系统问题总结之进程管理
    Element-UI 去掉表格边框(表格Hover事件移除)
  • 原文地址:https://www.cnblogs.com/zhuyongblogs/p/5733312.html
Copyright © 2011-2022 走看看