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

  • 相关阅读:
    TypeScript完全解读(26课时)_7.ES6精讲
    Flutter实战视频-移动电商-66.会员中心_编写ListTile通用方法
    Residual Networks &lt;2015 ICCV, ImageNet 图像分类Top1&gt;
    Coursera《machine learning》--(14)数据降维
    C# webbrowser遍历网页元素
    查询某表空间被哪些用户所使用
    C 语言运算符优先级(记忆口诀)
    建立简单的哈希表
    【LeetCode-面试算法经典-Java实现】【168-Excel Sheet Column Title(Excell列标题)】
    计算随意无序字符串中的最大有序串
  • 原文地址:https://www.cnblogs.com/zhuyongblogs/p/5733312.html
Copyright © 2011-2022 走看看