C# 使用FluentScheduler触发定时任务

写在前面

FluentScheduler是.Net平台下的一个自动任务调度组件,以前经常用的是Quarz.Net,相对而言FluentScheduler的定时配置更为直观,可直接用接口进行参数化设置,对Cron表达式有恐惧症的人来说简直就是福音,使用起来非常方便。

老规矩从NuGet获取该组件

代码实现

    public class SchedulerTester
    {

        public static void TestAddJob()
        {
            JobManager.Initialize();
            JobManager.AddJob(
                () => Console.WriteLine("1 minutes just passed."),
                s => s.ToRunEvery(1).Minutes()
            );
        }

        public static void TestUseRegistry()
        {
            var registry = new Registry();
            registry.Schedule<MyJob>().ToRunNow().AndEvery(2).Seconds();
            registry.Schedule<MyJob>().ToRunOnceIn(5).Seconds();
            registry.Schedule(() => Console.WriteLine("It's 9:15 PM now.")).ToRunEvery(1).Days().At(21, 15);
            //registry.Schedule<MyComplexJob>().ToRunNow().AndEvery(1).Months().OnTheFirst(DayOfWeek.Monday).At(3, 0);
            registry.Schedule<MyComplexJob>().ToRunNow().AndEvery(1).Seconds();
            registry.Schedule<MyJob>().AndThen<MyOtherJob>().ToRunNow().AndEvery(5).Minutes();
            JobManager.Initialize(registry);
        }

        public static void TestMyRegistry()
        {
            JobManager.Initialize(new MyRegistry());
        }

    }

    public class MyRegistry : Registry
    {
        public MyRegistry()
        {
            // Schedule an ITask to run at an interval
            Schedule<MyJob>().ToRunNow().AndEvery(2).Seconds();

            // Schedule an ITask to run once, delayed by a specific time interval. 
            Schedule<MyJob>().ToRunOnceIn(5).Seconds();

            // Schedule a simple task to run at a specific time
            Schedule(() => Console.WriteLine("Timed Task - Will run every day at 9:15pm: " + DateTime.Now)).ToRunEvery(1).Days().At(21, 15);

            // Schedule a more complex action to run immediately and on an monthly interval
            Schedule(() =>
            {
                Console.WriteLine("Complex Action Task Starts: " + DateTime.Now);
                Thread.Sleep(1000);
                Console.WriteLine("Complex Action Task Ends: " + DateTime.Now);
            }).ToRunNow().AndEvery(1).Months().OnTheFirst(DayOfWeek.Monday).At(3, 0);

            // Schedule a job using a factory method and pass parameters to the constructor.
            Schedule(() => new MyComplexJob("Foo", DateTime.Now)).ToRunNow().AndEvery(2).Seconds();

            //Schedule multiple tasks to be run in a single schedule
            Schedule<MyJob>().AndThen<MyOtherJob>().ToRunNow().AndEvery(1).Minutes();
             
        }
    }

    public class MyJob : IJob
    {
        public void Execute()
        {
            Console.WriteLine("MyJob is Executed");
        }
    }

    public class MyOtherJob : IJob
    {
        public void Execute()
        {
            Console.WriteLine("MyOtherJob is Executed");
        }
    }

    public class MyComplexJob : IJob
    {
        private string _name { get; set; }

        private DateTime _date { get; set; }

        public MyComplexJob(string name, DateTime dateTime)
        {
            this._name = name;
            this._date = dateTime;
        }

        public void Execute()
        {
            Console.WriteLine($"MyComplexJob is Executed, name is {_name}, datetime:{_date.ToShortDateString()}");
        }
    }

调用示例:

SchedulerTester.TestUseRegistry();

SchedulerTester.TestMyRegistry();

SchedulerTester.TestAddJob();

执行结果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/226574.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java网络编程,使用UDP实现TCP(一), 基本实现三次握手

简介&#xff1a; 首先我们需要知道TCP传输和UDP传输的区别&#xff0c;UDP相当于只管发送不管对方是否接收到了&#xff0c;而TCP相当于打电话&#xff0c;需要进行3次握手&#xff0c;4次挥手&#xff0c;所以我们就需要在应用层上做一些功能添加&#xff0c;如&#xff1a;…

Spring基于注解存储对象

小王学习录 前言基于注解存储对象Controller (控制器存储)Service (服务存储)Repository (仓库存储)Component (组件存储)Configuration (配置存储)Bean(方法注解) 前言 上一篇文章中已经介绍了在Spring中存储Bean和取Bean的方法. 而在 Spring 中想要更简单的存储和读取对象的…

让工作更高效,那些不能错过的8款泳道图绘制工具

在现代企业的运营管理中&#xff0c;泳道图扮演了至关重要的角色。这种独特的图表工具以其直观、清晰的特点&#xff0c;帮助我们理解和改进复杂的工作流程&#xff0c;从而提升效率。本文将为你分享8款实用且高效的泳道图绘制工具&#xff0c;它们能够帮助你轻松创建出专业级别…

Emscripten运行时

本章将简要介绍Emscripten环境下与运行时相关的部分知识&#xff0c;包括消息循环、文件系统、内存管理等内容。 main函数与生命周期 生成本地代码时&#xff0c;作为C/C程序的入口函数&#xff0c;通常main()函数意味着程序的整个生命周期&#xff0c;程序随main()函数返回的…

第二十一章网络通信总结博客

局域网与互联网 为了实现两台计算机的通信&#xff0c;必须用一个网络线路连接两台计算机。如下图所示 网络协议 1.IP协议 IP是Internet Protocol的简称&#xff0c;是一种网络协议。Internet 网络采用的协议是TCP/IP协议&#xff0c;其全称是Transmission Control Protocol/I…

对Spring源码的学习:一

目录 BeanFactory开发流程 ApplicationContext BeanFactory与ApplicationContext对比 基于XML方式的Bean的配置 自动装配 BeanFactory开发流程 这里的第三方指的是Spring提供的BeanFactory&#xff0c;Spring启动时会初始化BeanFactory&#xff0c;然后读取配置清单&#…

力扣每日一题:1466. 重新规划路线(2023-12-07)

力扣每日一题 题目&#xff1a;1466. 重新规划路线 日期&#xff1a;2023-12-07 用时&#xff1a;45 m 36 s 时间&#xff1a;37ms 内存&#xff1a;69.64MB 代码&#xff1a; class Solution {public int minReorder(int n, int[][] connections) {list new List[n];Arrays…

IPTABLES(一)

文章目录 1. iptables基本介绍1.1 什么是防火墙1.2 防火墙种类1.3 iptables介绍1.4 包过滤防火墙1.5 包过滤防火墙如何实现 2. iptables链的概念2.1 什么是链2.2 iptables有哪些链 3. iptables表的概念3.1 什么是表3.2 表的功能3.3 表与链的关系 4. iptables规则管理4.1 什么是…

Shell数组函数:数组——数组和循环(二)

for脚本快速定义数组 [rootlocalhost ~]# vim for12.sh #脚本编辑 #!/bin/bash for a in cat /etc/hosts do hosts[o]$a donefor i in ${!hosts[]} do echo "$i : ${hosts[$a]}" done[rootlocalhost ~]# vim for12.sh #执行脚本区别 &#xff1a;for的空格分割…

coredump

linux原生 一、设置 $ cat /proc/sys/kernel/core_pattern 通过查看core_pattern文件&#xff0c;发现其确实指定了一个路径&#xff0c;于是我前往那个路径&#xff0c;发现竟然是脚本程序&#xff0c;后来查看说明文件&#xff0c;才知道core_pattern中如果首先指定了一个 …

docker 可视化工具操作说明 portainer

官网地址 https://docs.portainer.io/start/install-ce/server/docker/linux 1.First, create the volume that Port docker volume create portainer_data2.下载并安装容器 docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restartalways -v /var/run/docker…

前端:让一个div悬浮在另一个div之上

使用 CSS 的 position 属性和 z-index 属性 首先&#xff0c;将第二个 div 元素的 position 属性设为 relative 或 absolute。这样可以让该元素成为一个定位元素&#xff0c;使得后代元素可以相对于它进行定位。 然后&#xff0c;将要悬浮的 div 元素的 position 属性设为 ab…

DOS 批处理 (二)

DOS 批处理 1. 基础 DOS 命令1.1 基础命令1.2 文件系统操作1.3 文件夹管理1.4 文件管理1.5 网络相关1.6 系统管理1.7 IF、FOR和NETIFFORNET 1. 基础 DOS 命令 command /? 查找帮助DOS命令不区分命令字母的大小写 C:\Users\Administrator>echo 1 1 C:\Users\Administrator…

SQL面试题,判断if的实战应用

有如下表&#xff0c;请对这张表显示那些学生的成绩为及格&#xff0c;那些为不及格 1、创建表&#xff0c;插入数据 CREATE TABLE chapter8 (id VARCHAR(255) NULL,name VARCHAR(255) NULL,class VARCHAR(255) NULL,score VARCHAR(255) NULL );INSERT INTO chapter8 (id, n…

嵌入式系统

嵌入式系统 目前国内一个普遍认同的嵌入式系统定义是&#xff1a;以应用为中心、以计算机技术为基础&#xff0c;软件硬件可裁剪&#xff0c;适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。&#xff08;引用自《嵌入式系统设计师教程》&#xff09; …

点评项目——商户查询缓存

2023.12.7 redis实现商户查询缓存 在企业开发中&#xff0c;用户的访问量动辄成百上千万&#xff0c;如果没有缓存机制&#xff0c;数据库将承受很大的压力。本章我们使用redis来实现商户查询缓存。 原来的操作是根据商铺id直接从数据库查询商铺信息&#xff0c;为了防止频繁地…

一维相位解包裹

一维相位解包裹 本文首先介绍最简单的一维的位相解包裹算法。设W是包裹运算符&#xff0c;中是解包裹位相&#xff0c;是包裹的位相。则一维位相解包裹可表示为&#xff1a; 解包裹就是要选取正确的k,满足&#xff1a; 两个相邻像素位相的差值如下&#xff1a; 由式(2-1)和式(2…

JOSEF快速中间继电器DZK-916 4A AC220V板后嵌入式安装

系列型号 DZK-911快速中间继电器&#xff1b;DZK-912快速中间继电器&#xff1b; DZK-914快速中间继电器&#xff1b;DZK-916快速中间继电器&#xff1b; DZK-917快速中间继电器&#xff1b;DZK-918快速中间继电器&#xff1b; DZK-924快速中间继电器&#xff1b;DZK-934快速中…

德国进口高速主轴电机在机器人上的应用及选型方案

随着机器人技术的日新月异&#xff0c;高速主轴电机在机器人领域的应用也日趋广泛。德国进口的SycoTec高速主轴电机&#xff0c;以其高转速、高精度、高刚度的特点&#xff0c;在机器人的切割、铣削、钻孔、去毛刺等加工应用中发挥着关键作用。 一、高速主轴电机的特点 SycoT…

【项目问题解决】IDEA2020.3 使用 lombok 插件 java: 找不到符号 符号: 方法 builder()

目录 lombok找不到符号问题修改 1.问题描述2.问题原因3.解决思路4.解决方案5.总结6.参考 文章所属专区 项目问题解决 1.问题描述 IDEA2020.3 使用 lombok 插件 java: 找不到符号 符号: 方法 builder()&#xff0c;无法使用lombok下应有的注解&#xff0c;一度怀疑是版本问题 …