首页 > 其他分享 >定时调度插件------FluentScheduler

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

时间:2023-01-07 17:00:11浏览次数:61  
标签:info 插件 Schedule JobManager WithName 任务 ------ FluentScheduler public

定时调度插件------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}");
    

标签:info,插件,Schedule,JobManager,WithName,任务,------,FluentScheduler,public
From: https://www.cnblogs.com/wanghun315/p/17032990.html

相关文章

  • 2023.1.7 DP 学习日志
    上午编辑距离(AcWing.899)思路:同最短编辑距离,只不过要做\(m\)次。code:#include<bits/stdc++.h>#definelllonglong#defineN1005usingnamespacestd;inlinel......
  • MySQL常用操作
    MySQL常用操作登录mysql-uroot-p密码DDL查询showdatabases;#查询目前有哪几个数据库showtables;#查询当前数据库中有哪些表desctablename;#查询某张表......
  • javaScript-DOM-获取元素,事件基础,操作元素
    javaScript-DOM目录javaScript-DOM1.DOM简介1.1什么是DOM1.2DOM树2.获取元素2.1如何获取页面元素2.2根据ID获取2.3根据标签名获取2.4通过HTML5新增的方法......
  • 1658. 将 x 减到 0 的最小操作数
    太久没有写算法题而且算法底子本就薄弱导致这个题总感觉很熟悉却怎么也写不出的情况......
  • 平面广告创意方法有哪些?-优漫动游
      平面广告创意方法有哪些?平面广告的创意是指广告中传达信息的手法和形式。广告创意的基本要求是通过创造新颖、独特的视觉效果来吸引人们的注意力。而传播目的则是通过......
  • asm:dosbox安装及汇编环境配置(win)
    asm:dosbox安装及汇编环境配置(win)    一、dosbox安装及汇编环境配置 dosbox的安装以及汇编测试1、建立文件夹: 1.1 G:\assemblyWorkspaces\masm_dos......
  • Cesium for Unreal加载倾斜摄影
    本文介绍UE4中通过Cesium插架加载本地倾斜摄影模型。CesiumforUnreal插件运行在UE环境何总运行Cesium,这样方便做一个GIS应用。安装CesiumforUnreal插件在UE虚幻商......
  • 记录一下绘制圆柱的过程
    usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;publicclassCreatCylinder:MonoBehaviour{publicintn=......
  • 随笔 有所思20230107
    过2023年这一年26岁。工作的问题未解决。找份硬件测试的工作,看看。测试的要求其实还挺高的。想要有个屋子,有个书桌,有个书房。租房的每日的房租支出,一日34元的房租,电费......
  • K8s 为什么会抛弃 docker
    为什么K8s会抛弃docker前言CRIcontainerd参考为什么K8s会抛弃docker前言在这之前先来了解下,k8s是如何和docker进行交互的。CRIkubelet调用下层容......