C#定时任务框架Quartz.NET介绍与用法

 更新时间:2022年02月07日 10:59:59   作者:痕迹g  
这篇文章介绍了C#定时任务框架Quartz.NET的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

什么是定时任务?

最近恰巧有类似的需求, 需要做一个应用程序服务, 每天定时给服务器上传采集的数据。

在没有任务框架的使用前提下, 如果我们想要实现类似的需求,可以自己写一个计时器, 然后24小时运行,达到指定的时间就运行。但是这样不仅扩展性差, 而且不易于维护。

在定时任务这块, 也有非常的多的框架支持,开箱即用, 那么下面将主要介绍一下Quartz.NET框架

Github

Quartz.NET介绍

Quartz.NET是一个Github开源项目,用于创建一个免费商业用途的作业调度框架。

注:支持 .NET Core/.NET Standard 2.0 和 .NET 框架 4.6.1 及更晚版本。

Quartz.NET入门

在我们使用定时任务框架的之前, 首先我们需要确定的是, 它大概具备哪些内容。

  • 灵活的指定某项任务
  • 灵活的启动时间配置
  • 传递参数并且监听

了解了这些基础概念之后, 我们便开始学习如何在Quartz.NET当中使用这些功能。

1.创建一个任务

任务是一个抽象的概念, 实际来说它应该指的是某种任务, 例如: 想要每3秒输入一个字符串, 那么我们就可以这样做。

  • 下面演示创建了一个类, 它继承于IJob接口, 实现了Execute方法, 任务就是输出一个字符串。
    public class TestJob : IJob
    {
        public async Task Execute(IJobExecutionContext context)
        {
            await Console.Out.WriteLineAsync($"{DateTime.Now}:Hello!");
        }
    }
  • 创建任务
            //创建一个工作
            IJobDetail job = JobBuilder.Create<TestJob>()
             .WithIdentity("TestJob", "Test")
            .Build();

2.配置任务的参数

为任务配置一个触发条件及相关的参数。当该配置的参数一旦达到了条件, 上面的任务将被触发。

            //创建一个触发条件
            ITrigger trigger = TriggerBuilder.Create()
               .WithIdentity("TestJobTrigger", "Test")
               .WithSimpleSchedule(x =>
               {
                   x.WithIntervalInSeconds(3).RepeatForever();
               })
               .Build();

3.启动任务

创建一个任务调度器, 将任务和配置参数添加到调度器当中。

            StdSchedulerFactory factory = new StdSchedulerFactory();
            //创建任务调度器
            IScheduler scheduler = await factory.GetScheduler();
            //启动任务调度器
            scheduler.Start();  

            //将创建的任务和触发器条件添加到创建的任务调度器当中
            scheduler.ScheduleJob(job, trigger);

4.实际效果

在上面的代码中,我们创建了一个任务输出一段字符串, 然后为该任务创建了一个配置, 每3秒执行一次, 那么实际效果会每间隔3秒输出:

更多配置

  • 特定时间触发,重复触发,单次触发, 触发次数,开始时间, 结束时间。 这些在框架当中都有该功能

  • 触发器表达式 ,例如: 每周一上午, 或每周一、周三、周五等等

    下面是一些表达式及其含义的示例示例 1 - 创建每 5 分钟触发一次的触发器的表达式

"0 0/5 * * * ?"

示例 2 - 创建每 5 分钟触发一次的触发器的表达式,在分钟后 10 秒(即上午 10:00:10、上午 10:05:10 等)。

"10 0/5 * * * ?"

示例 3 - 用于创建触发器的表达式,该触发器在每个星期三和周五的 10:30、11:30、12:30 和 13:30 触发。

"0 30 10-13 ? * WED,FRI"

示例 4 - 创建触发器的表达式,在每月 5 日到 20 日上午 8 点到上午 10 点之间每半小时触发一次。请注意,触发器不会于上午 10:00 触发,只是在 8:00、8:30、9:00 和 9:30

"0 0/30 8-9 5,20 * ?"

点击查看更多触发器表达式

  • 监听器: 可以检测你的任务执行状态: 是否工作, 是否错误,是否已完成等

关于具体的使用方法, 在文档中有详细的介绍:

查看Quartz.NET文档

到此这篇关于C#定时任务框架Quartz.NET介绍与用法的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C#队列Queue用法实例分析

    C#队列Queue用法实例分析

    这篇文章主要介绍了C#队列Queue用法,实例分析了队列的功能、定义及相关使用技巧,需要的朋友可以参考下
    2015-05-05
  • c#冒泡排序示例分享

    c#冒泡排序示例分享

    这篇文章主要介绍了c#冒泡排序示例分享,需要的朋友可以参考下
    2014-02-02
  • C#实现基于任务的异步编程模式

    C#实现基于任务的异步编程模式

    本文详细讲解了C#实现基于任务的异步编程模式,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • 详解C#如何使用屏障实现多线程并发操作保持同步

    详解C#如何使用屏障实现多线程并发操作保持同步

    这篇文章主要为大家详细介绍了C#如何使用屏障实现多线程并发操作保持同步,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以参考下
    2024-01-01
  • C#中把任意类型的泛型集合转换成SQLXML数据格式的实例

    C#中把任意类型的泛型集合转换成SQLXML数据格式的实例

    本文主要分享了C#中把任意类型的泛型集合转换成SQLXML数据格式的实例代码。具有很好的参考价值,需要的朋友可以看下
    2016-12-12
  • C#子类对基类方法的继承、重写与隐藏详解

    C#子类对基类方法的继承、重写与隐藏详解

    这篇文章主要介绍了C#子类对基类方法的继承、重写与隐藏的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-07-07
  • C#实现将RTF转为HTML的示例代码

    C#实现将RTF转为HTML的示例代码

    RTF文档即富文本格式(Rich Text Format)的文档。我们在处理文件时,遇到需要对文档格式进行转换时,可以将RTF转为其他格式,如转为DOCX/DOC、PDF或者HTML。本文将利用C#实现RTF转HTML,需要的可以参考一下
    2022-04-04
  • 深入学习C#网络编程之HTTP应用编程(下)

    深入学习C#网络编程之HTTP应用编程(下)

    这篇文章主要介绍了深入学习C#网络编程之HTTP应用编程的相关知识,文中讲解的非常详细,帮助大家更好的学习c#网络编程,感兴趣的朋友可以了解下
    2020-06-06
  • Unity实现鼠标或者手指点击模型播放动画

    Unity实现鼠标或者手指点击模型播放动画

    这篇文章主要为大家详细介绍了Unity实现鼠标或者手指点击模型播放动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01
  • FileShare枚举的使用小结(文件读写锁)

    FileShare枚举的使用小结(文件读写锁)

    其实/FileShare就是控制文件流的“访问权限”,当然,这仅仅是入门的文件操作,自己做了笔记,也希望能给大家带来帮助
    2014-01-01

最新评论