zoukankan      html  css  js  c++  java
  • FluentScheduler定时器

    一、定时任务调度的方法或者组件:

    Timer:https://docs.microsoft.com/en-us/dotnet/api/system.timers.timer?view=netframework-4.8
    FluentScheduler:https://www.nuget.org/packages/FluentScheduler/
    Quartz.NET:https://www.nuget.org/packages/Quartz/
    Hangfire:https://www.nuget.org/packages/Hangfire/
    TaskScheduler:https://www.nuget.org/packages/TaskScheduler/
    Gofer.NET:https://github.com/brthor/Gofer.NET
    Coravel:https://www.nuget.org/packages/Coravel/3


    任务定时器–FluentScheduler组件可以在C#和ASP.NET程序中使用,使用方法很简单,官方有使用案例:

    FluentScheduler 中 对象: IJob(工作)、Registry(注册)、Schedule(计划)

    二、实例

    项目需要一个按时执行的任务,每隔几分钟执行一个,或者每隔几小时执行一次等等,这个时候就需要一个定时的功能,最简单的就是用Timer自己写一个,但是自己写的性能等各方面有可能不健全等等,而现在开源的库也越来越多,功能也越来越好,直接拿来主义。

    1.NuGet下载FluentScheduler控件

    FluentScheduler定时任务库,通过nuget引用,可以设置各种事件间隔,,超级方便简单。

    2.编写一个注册表。继承Registry类

    using FluentScheduler;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace NetFrameTest.test
    {
        public class MyRegistry : Registry
        {
            public MyRegistry()
            {
                // 每天执行一次(这里是在每天的下午 15:40 分执行),可以不用类,直接虚拟方法
                Schedule(() => Console.WriteLine("It's 15:42  now.")).ToRunEvery(1).Days().At(15, 42);
    
                // 每两秒执行一次(指定一个时间间隔运行,根据自己需求,可以是秒、分、时、天、月、年等。)
                Schedule<MyJob>().ToRunNow().AndEvery(2).Seconds();
    
                // 每五秒执行一次(延迟一个指定时间间隔执行一次计划任务)
                Schedule<MyJob>().ToRunOnceIn(5).Seconds();
    
                // 每月执行一次(这里是在每月的第一周的周一3点执行)
                Schedule<MyJob>().ToRunNow().AndEvery(1).Months().OnTheLast(DayOfWeek.Friday).At(16, 0);
    
                // 构造函数执行
                Schedule(() => new MyOtherJob("Foo")).ToRunNow().AndEvery(2).Seconds();
    
                // 先执行第一个Job、再执行第二个Job;完成后等5秒继续循环
                Schedule<MyJob>().AndThen<MyOtherJob>().ToRunNow().AndEvery(5).Minutes();
            }
    
        }
    
    }

    3.编写定时执行任务,工作类

    根据使用方法,是否实现IJob接口

        public class MyJob : IJob
        {
            public void Execute()
            {
                Console.WriteLine($"MyJob  当前时间:{DateTime.Now}");
            }
        }
    
        public class MyOtherJob : IJob
        {
            private string Name;
            public MyOtherJob(string name)
            {
                Name = name;
            }
    
            public void Execute()
            {
                Console.WriteLine($"MyOtherJob 姓名:{Name}  当前时间:{DateTime.Now}");
            }
        }

    4.初始化定时器

    定时任务写好之后只需要在Main中引用就可以了

    //  static void Main(string[] args)
    JobManager.Initialize(new MyRegistry());

    在ASP.NET程序的Global.asax文件中,首先初始化管理器,这样定时器就开启了。

    protected void Application_Start()
    {
        JobManager.Initialize(new MyRegistry());
    }

    以上是第一种写法,下面介绍第二种写法,这里执行多个任务 不同时间段

    protected void Application_Start()
    {
        JobManager.AddJob<MyJob>(t=>t.ToRunEvery(1).Days().At(24,00));//每天的凌晨12点 执行 
        JobManager.AddJob<MyOtherJob>(t => t.ToRunEvery(1).Months().OnTheLastDay().At(8,30));//每个月的最后一天早上八点半 执行
        JobManager.Start();//启动任务管理器
    }
  • 相关阅读:
    makedown
    前端
    关于阅读与自我认同
    Win10任务栏透明工具 TranslucentTB
    Linux文件属性
    解决vscode出现两个光标的问题
    一文搞懂vim复制粘贴
    解决vim选中文字不能复制的问题
    简单配置让iterm2用得更爽
    区块链相关在线加解密工具(非对称加密/hash)
  • 原文地址:https://www.cnblogs.com/springsnow/p/13158559.html
Copyright © 2011-2022 走看看