定时调度插件------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. <一>从指令角度了解函数堆栈调用过程

    代码 点击查看代码 #include <iostream> using namespace std; int sum(int a,int b){ int temp=0; temp= a + ...

  2. minio API demo

    package mainimport ( "context" "fmt" "github.com/minio/minio-go/v7" &q ...

  3. ArrayList中的ConcurrentModificationException,并发修改异常,fail-fast机制。

    一:什么时候出现? 当我们用迭代器循环list的时候,在其中用list的方法新增/删除元素,就会出现这个错误. package com.sinitek.aml; import java.util.Ar ...

  4. Python: 你所不知道的星号 * 用法

    以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「englyf」https://mp.weixin.qq.com/s/FHyosiG_tegF5NRUEs7UdA 本文大概 1193 个 ...

  5. 使用 Rainbond 搭建本地开发环境

    在开发之前,你需要在本地安装各种开发工具和服务,比如:Mysql.Redis.Nacos 等等,我们都知道在个人电脑上安装这些服务相当的繁琐,可能会遇到很多问题,环境问题.依赖问题等等. 在需要团队协 ...

  6. JavaScript合集(流程控制语句)

    流程控制 条件判断语句 条件分支语句 循环语句 条件判断语句 if语句 语法: if(条件表达式){ 语句 } ------- if(a > 10){ alert('a比10大') } if-e ...

  7. 【每日一题】【暴力、动态规划、动规优化、贪心】2022年1月21日-NC19 连续子数组的最大和/最大子序和

    同:最大子序和 https://www.cnblogs.com/liujinhui/p/15574312.html 描述输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组. ...

  8. node-sass报错(Node Sass could not find a binding for your current environment)

    解决方案:参考 https://stackoverflow.com/questions/37986800/node-sass-couldnt-find-a-binding-for-your-curre ...

  9. mysql报错:【系统出错。发生系统错误 1067。进程意外终止。】解决

    目录 问题描述 错误排查 1.检查3306端口是否被占用 2.使用window事件查看器 总结 问题描述 使用管理员cmd,任务管理器均无法启动mysql. 报错提示信息:系统出错.发生系统错误 10 ...

  10. 前端内容(HTML CSS javaScript)

    前端内容 前端基础之HTML 前端基础之HTML HTML标签使用 HTML之form表单 前端基础之CSS 前端基础之CSS CSS字体颜色 背景 盒子模型 CSS浮动 溢出 头像框 CSS定位 i ...