定时调度插件------FluentScheduler

源码地址

官网文档地址

使用说明

dll引用

  • 文章使用的版本为5.5.1版本
  • 使用GuGet搜索FluentScheduler即可找到
    • 如果框架为.NET Framework4.5+,.NET Core 1.0+或.NET5.0+,可使用5.5.1最新版本
    • 如果框架为.NET Framework4.0,则需要降低版本,下载5.3.0版本
  • 源代码编译
    • 源代码共三个项目,其中直接编译FluentScheduler即可,无需多余操作

官方说明

  • 该组件不支持100ms以下的时间间隔

  • 官方不建议使用:IJobFactory

  • 不支持Cron

官方例子

  1. 最简洁代码

    // 初始化
    JobManager.Initialize();
    // 添加调度任务
    JobManager.AddJob(
    // 调度业务
    () => Console.WriteLine("5 minutes just passed."),
    // 触发时间
    s => s.ToRunEvery(5).Minutes()
    );
    // 立即停止
    JobManager.Stop();
    // 在任务完成后等待或者停止
    JobManager.StopAndBlock();
  2. Schedules 自定义调度任务

    FluentScheduler支持自定义Schedules,相当于在初始化的时候可以自定义很多调度任务,在程序运行时可根据实际业务情况移除特定任务或增加任务。

    • JobManager.Initialize(new MyRegistry()); //调度任务初始化

    • Registry直接添加任务

      // 声明一个Registry类
      var registry = new Registry();
      // 每天21点15分执行一次
      registry.Schedule(() => Console.WriteLine("It's 9:15 PM now.")).ToRunEvery(1).Days().At(21, 15);
      // 创建了一个叫"NonReentrant"的任务,在1秒后执行休眠1分钟,不重复(NonReentrant方法)
      registry.Schedule(() => Sleep(TimeSpan.FromMinutes(1)).NonReentrant().WithName("NonReentrant").ToRunEvery(1).Seconds(); //调度任务初始化
      JobManager.Initialize(registry);
    • 自定义调度任务:继承Registry类

      // MyRegistry.cs
      public class MyRegistry : Registry
      {
      public MyRegistry()
      {
      // 让所有任务都不重复执行
      NonReentrantAsDefault();
      // 每天21点15分执行一次
      Schedule(() => Console.WriteLine("It's 9:15 PM now.")).ToRunEvery(1).Days().At(21, 15);
      // 创建了一个叫"NonReentrant"的任务,在1秒后执行休眠1分钟,不重复(NonReentrant方法)
      Schedule(() => Sleep(TimeSpan.FromMinutes(1)).NonReentrant().WithName("NonReentrant").ToRunEvery(1).Seconds();
      // 创建了一个叫“Reentrant”的任务,马上执行,且每隔1分钟就执行休眠3分钟的指令
      Schedule(() =>
      {
      Sleep(TimeSpan.FromMinutes(3));
      }).WithName("Reentrant").ToRunNow().AndEvery(1).Minutes();
      // 创建了一个叫“Disable”的任务,该任务200秒后执行一次
      Schedule(() =>
      {
      Sleep(TimeSpan.FromMinutes(3));
      }).WithName("Disable").ToRunOnceIn(200).Seconds();
      // 创建了一个叫“FiveMinutes”的任务,该任务在5分钟后开始执行,并且每个10分钟继续执行
      Schedule(() => Sleep(TimeSpan.FromMinutes(3))).WithName("FiveMinutes").ToRunOnceAt(DateTime.Now.AddMinutes(5)).AndEvery(10).Minutes();
      // 创建了一个叫“Weeks”的任务,每周执行一次
      Schedule(() => Sleep(TimeSpan.FromMinutes(3))).WithName("Weeks").ToRunEvery(1).Weeks();
      // 通过Weeks方法,依此类推还有 Weekdays()-每周工作日提醒 Days():每天提醒 Hours():每小时提醒
      }
      } //主函数中调用
      JobManager.Initialize(new MyRegistry());
    • 自定义计划任务:通过继承IJob接口并实现Execute方法

      //ParameterJob.cs
      //实现IJob接口
      public class WriteLineJob : IJob
      {
      public string Parameter { get; set; }
      // 任务实际触发方法
      public void Execute() => System.Console.WriteLine($"调入参数:{Parameter}");
      }
      public class DisposableJob : IJob, IDisposable
      {
      // 任务实际触发方法
      public void Execute() => Logger.Information("Disposable: executing");
      // 销毁时触发的方法
      public void Dispose() => Logger.Information("Disposable: disposed");
      }
      // MyRegistry.cs
      // 将WriteLineJob加入到调度任务类中
      // 直接new一个WriteLineJob并赋值,然后10s后调用
      Schedule(new WriteLineJob{ Parameter = "Foo" }).WithName("Parameter").ToRunOnceIn(10).Seconds();
      // 也是10s后运行,运行完成后会执行Dispose方法
      Schedule<DisposableJob>().WithName("Disposable").ToRunOnceIn(10).Seconds();
  3. 事件监听

    FluentScheduler支持三种事件,分别为任务开始,任务结束和任务异常

    // 抛出异常时触发
    // info为JobExceptionInfo类,Name:任务名称;Exception:触发的异常类
    JobManager.JobException += info => System.Console.WriteLine($"异常信息:{info.Exception}");
    // 任务开始时触发
    // info为JobStartInfo类,Name:任务名称;StartTime:开始时间
    JobManager.JobStart += info => System.Console.WriteLine($"任务{info.Name}开始执行");
    // 任务完成后触发
    // info为JobEndInfo类,Name:任务名称;StartTime:开始时间;NextRun:下次执行时间;Duration:该任务持续时间
    JobManager.JobEnd += info => System.Console.WriteLine($"任务{info.Name}开始执结束,持续时间:{info.Duration}");

定时调度插件------FluentScheduler的更多相关文章

  1. SpringBoot系列九:SpringBoot服务整合(整合邮件服务、定时调度、Actuator监控)

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 服务整合 2.背景 在进行项目开发的时候经常会遇见以下的几个问题:需要进行邮件发送.定时的任务调 ...

  2. java定时调度器解决方案分类及特性介绍

    什么是定时调度器? 我们知道程序的运行要么是由事件触发的,而这种事件的触发源头往往是用户通过ui交互操作层层传递过来的:但是我们知道还有另外一种由机器系统时间触发的程序运行场景.大家想想是否遇到或者听 ...

  3. Quartz定时调度框架

    Quartz定时调度框架CronTrigger时间配置格式说明 CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年 ...

  4. Spring Quartz定时调度任务配置

    applicationContext-quartz.xml定时调度任务启动代码: <?xml version="1.0" encoding="UTF-8" ...

  5. 定时调度框架Quartz随笔

    最近项目中的定时批处理用到了quartz定时任务,在此记录下quartz的配置吧,一个小demo仅供参考,也方便自己今后复习! 下面直接来步骤吧! 一.首先,要搭起能让quartz正常运行的环境,至少 ...

  6. wordpress自动批量定时发布插件 DX-auto-publish

    DX-auto-publish是一款wordpress自动发布插件,方便实用. 该wordpress插件的主要功能如下: 1.能够自动批量定时发布wordpress站点的草稿文章,无需每篇文章都手动设 ...

  7. crontab 定时调度

    crontab -e */1 8-23 * * * /www/target/sh/myorder.sh & 0 1 * * * /www/target/php/sh/mymoney.sh &a ...

  8. java 多线程——quartz 定时调度的例子

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  9. java 多线程——一个定时调度的例子

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  10. linux定时调度器每秒运行一次

    linux操作系统最小粒度的定时调度器仅仅能调到分钟的级别,工作中有时需在到秒的调度,所以须要自己编写脚本来实现 #!/bin/bash while [ true ]; do /bin/sleep 1 ...

随机推荐

  1. Pyside2 开发框架

    apps文件夹 tools文件夹 Main.py .ui .json Global.py Main.py 通用 函数及子线程 函数内容

  2. [zoj] 4178. Killing the Brute-force

    题目 Chenjb is the task author of the 71-st Zhejiang Provincial Collegiate Programming Contest. He cre ...

  3. 使用SVN搭建本地版本控制仓库

    使用SVN搭载本地版本控制仓库[转] 如果是在公司,都是有云服务器,项目负责人都是把项目放在服务器上,我们直接用SVN地址就可以实现更新和下载项目源码,那么如果我们自己想使用SVN在本机管理自己写的一 ...

  4. C#多线程之同步基础篇

    目录 一.基本概念 二.锁构造 Monitor Mutex 死锁 三.信号构造 Semaphore ManualResetEvent AutoResetEvent CountdownEvent 四.等 ...

  5. SolidEdge ST8安装教程

    SolidEdge ST8安装教程: 1.使用百度云客户端下载Solidedge ST8软件安装包,打开软件安装文件夹: 2.选择.ISO安装文件,打开.ISO安装文件,可以解压或使用虚拟光驱加载: ...

  6. 【RocketMQ】顺序消息实现原理

    全局有序 在RocketMQ中,如果使消息全局有序,可以为Topic设置一个消息队列,使用一个生产者单线程发送数据,消费者端也使用单线程进行消费,从而保证消息的全局有序,但是这种方式效率低,一般不使用 ...

  7. 为什么Linux需要虚拟内存 [转载好文]

    操作系统中的 CPU 和主内存(Main memory)都是稀缺资源,所有运行在当前操作系统的进程会共享系统中的 CPU 和内存资源,操作系统会使用 CPU 调度器分配 CPU 时间1并引入虚拟内存系 ...

  8. elasticsearch bucket 之rare terms聚合

    目录 1.背景 2.需求 3.前置准备 3.1 准备mapping 3.2 准备数据 4.实现需求 4.1 dsl 4.2 java代码 4.3 运行结果 5.max_doc_count 和 sear ...

  9. hexo-通过-metaweblog-api-同步各大博客网站

    闲聊 不多逼逼了.上干货 如何写一篇文章同步到多个博客网站 最近通过hexo 建立了博客网站,发现流量少的可怜,那把文章发到各个博客网站呢,我又懒那通过一番研究 终于搞定了通过MetaWebLog A ...

  10. 当我们说大数据Hadoop,究竟在说什么?

    前言 提到大数据,大抵逃不过两个问题,一个是海量的数据该如何存储,另外一个就是那么多数据该如何进行查询计算呢.好在这些问题前人都有了解决方案,而Hadoop就是其中的佼佼者,是目前市面上最流行的一个大 ...