zoukankan      html  css  js  c++  java
  • [C#]使用Quartz.NET来创建定时工作任务


    本文为原创文章、源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称、作者及网址,谢谢!


    开发工具:VS2017

    语言:C#

    DotNet版本:.Net FrameWork 4.0及以上

    一、安装Quartz

    在“程序包管理器控制台”输入(下划线所示):

    PM> Install-Package Quartz

    安装完毕之后,引用的DLL如下:

    二、编写以下代码(具体见注释)

     1 using Quartz;
     2 using Quartz.Impl;
     3 using System;
     4 using System.Threading;
     5 
     6 namespace QuartzConsoleApp
     7 {
     8     class Program
     9     {
    10         static void Main(string[] args)
    11         {
    12             //创建一个标准调度器工厂
    13             ISchedulerFactory factory = new StdSchedulerFactory();
    14             //通过从标准调度器工厂获得一个调度器,用来启动任务
    15             IScheduler scheduler =  factory.GetScheduler();
    16             //调度器的线程开始执行,用以触发Trigger
    17             scheduler.Start();
    18 
    19             //使用组别、名称创建一个工作明细,此处为所需要执行的任务
    20             IJobDetail detail1 = JobBuilder.Create<MyFirstJob>().WithIdentity("MyJob1", "MyGroup").Build();
    21             //通过使用UsingJobData添加传递到context(类型:IJobExecutionContext)的属性
    22             IJobDetail detail2 = JobBuilder.Create<MySecondJob>().WithIdentity("MyJob2", "MyGroup").UsingJobData("Title","Hello World").
    23                 UsingJobData("Pi",Math.PI).UsingJobData("Cnxy","http://www.cnc6.cn").Build();
    24             IJobDetail detail3 = JobBuilder.Create<MyThridJob>().WithIdentity("MyJob3", "MyGroup").Build();
    25             //使用组别、名称创建一个触发器,其中触发器立即执行,且每隔1秒或3秒执行一个任务,重复执行
    26             ITrigger trigger1 = TriggerBuilder.Create().WithIdentity("MyTrigger1", "MyGroup").StartNow().WithSimpleSchedule(x => x.WithIntervalInSeconds(1).RepeatForever()).Build();
    27             ITrigger trigger2 = TriggerBuilder.Create().WithIdentity("MyTrigger2", "MyGroup").StartNow().WithSimpleSchedule(x => x.WithIntervalInSeconds(3).RepeatForever()).Build();
    28             ITrigger trigger3 = TriggerBuilder.Create().WithIdentity("MyTrigger3", "MyGroup").StartNow().WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever()).Build();
    29             //开始执行使用指定的触发器运行执行的工作任务
    30             scheduler.ScheduleJob(detail1, trigger1);
    31             scheduler.ScheduleJob(detail2, trigger2);
    32             scheduler.ScheduleJob(detail3, trigger3);
    33         }
    34     }
    35     //运行并发运行
    36     class MyFirstJob : IJob
    37     {
    38         public void Execute(IJobExecutionContext context)
    39         {
    40             //JobDetail.Key:标识JobDetail的唯一ID
    41             //Trigger.Key:标识Trigger的唯一ID
    42             Console.WriteLine($"1,现在时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}," +
    43                 $"工作明细:{context.JobDetail.Key.Name},工作触发器:{context.Trigger.Key.Name}");
    44         }
    45     }
    46     //运行并发运行
    47     class MySecondJob : IJob
    48     {
    49         //获得值的方式:3、属性注入
    50         public string Cnxy { set; get; }
    51         public void Execute(IJobExecutionContext context)
    52         {
    53             //获得值的方式:1、通过IJobExecutionContext.JobDetail.JobDataMap["Key"]获得所对应的值
    54             string value1 = (string)context.JobDetail.JobDataMap["Title"];
    55             //获得值的方式:2、也可以通过IJobExecutionContext.MergedJobDataMap["Key"]获得所对应的值
    56             double value2 = (double)context.MergedJobDataMap["Pi"];
    57             Console.WriteLine($"2,现在时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}," +
    58                 $"Title:{value1},Pi:{value2},CNXY:{Cnxy}");
    59         }
    60     }
    61 
    62     //不运行并发运行
    63     [DisallowConcurrentExecution]
    64     class MyThridJob : IJob
    65     {
    66         public void Execute(IJobExecutionContext context)
    67         {
    68             Console.WriteLine($"3,现在时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}");
    69             Thread.Sleep(3);
    70         }
    71     }
    72 
    73 }

    以上代码使用一个调度器(Scheduler)来运行一个指定的触发器(Trigger,包含运行时间间隔)并触发工作任务(JobDetail)。

    三、运行结果如下:

    四、参考链接:https://www.cnblogs.com/uptothesky/p/5633421.html

  • 相关阅读:
    32-Ubuntu-用户权限-03-修改文件权限
    31-Ubuntu-用户权限-02-ls输出信息介绍
    hdu2084 数塔
    hdu 1058 humble number
    HDU_2050 折线分割平面
    HDU_1030 Delta-wave 常数时间
    HDU_1021 Fibonacci Again 一些推论
    Gated Recurrent Unit(GRU)
    循环神经网络模型
    Bellman-Ford algorithm
  • 原文地址:https://www.cnblogs.com/cncc/p/8124681.html
Copyright © 2011-2022 走看看