项目需要一个按时执行的任务,每隔几分钟执行一个,或者每隔几小时执行一次等等,这个时候就需要一个定时的功能,最简单的就是用Timer自己写一个,但是自己写的性能等各方面有可能不健全等等,而现在开源的库也越来越多,功能也越来越好,我们是一批站在巨人肩上的人,好的东西也学会用,直接拿来主义。FluentScheduler定时任务库,通过nuget引用,可以设置各种事件间隔,,超级方便简单。

FluentScheduler定时器例子

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

            // 在同一个计划中执行两个(多个)任务
            Schedule<MyJob>().AndThen<MyOtherJob>().ToRunNow().AndEvery(5).Minutes();
        }

    }

    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}");
        }
    }
}

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

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

FluentScheduler源码地址

https://github.com/fluentscheduler/FluentScheduler

转载于:https://www.cnblogs.com/zhao123/p/10955607.html

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐