当前位置: 首页 > article >正文

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();

执行结果

 


http://www.kler.cn/news/161385.html

相关文章:

  • 视频分割方法:批量剪辑高效分割视频,提取m3u8视频技巧
  • 什么是数据架构
  • uniapp 使用 flex布局 将 图片展示 循环排列两列
  • 微信小程序中生命周期钩子函数
  • Python Tornado 框架的终极指南!
  • 交易历史记录20231207 记录
  • chatgpt用到哪些算法
  • 【android开发-14】android中fragment用法详细介绍
  • 简单实现Spring容器(二)
  • linux远程桌面管理工具(xrdp)、向日葵
  • UE4 双屏分辨率设置
  • 浅聊JAVA开发下环境部署与使用工具的安装与部署
  • yml配置文件获取数值不一致
  • ASP.NET Core 使用IIS调试出现505.24错误
  • electron调用dll问题总汇
  • 插件原理与开发
  • Tap虚拟网卡
  • 如何使用 Oracle SQL Developer 连接 pgvector
  • 【蓝桥杯选拔赛真题73】Scratch烟花特效 少儿编程scratch图形化编程 蓝桥杯创意编程选拔赛真题解析
  • Linux 线程——信号量
  • c++实验多态程序设计
  • Linux下安装Docker与Docker Compose
  • 数据库的索引
  • 3D模型格式转换工具HOOPS Exchange的典型应用场景介绍
  • 深入了解Java Period类,对时间段的精确控制
  • 理解js中原型链的封装继承多态
  • ky10 server x86在线安装ffmpeg
  • 在安全环境中使用虚拟化进行隔离——Armv8.4上的安全世界软件架构
  • Python插件 - 动态 简单账表 通过SQL存储过程输出列实现动态展示
  • Apache Hive(部署+SQL+FineBI构建展示)