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();//启动任务管理器
    }
  • 相关阅读:
    Single Number II
    Pascal's Triangle
    Remove Duplicates from Sorted Array
    Populating Next Right Pointers in Each Node
    Minimum Depth of Binary Tree
    Unique Paths
    Sort Colors
    Swap Nodes in Pairs
    Merge Two Sorted Lists
    Climbing Stairs
  • 原文地址:https://www.cnblogs.com/springsnow/p/13158559.html
Copyright © 2011-2022 走看看