热门IT资讯网

C# 任务调度器之FluentScheduler

发表于:2024-11-25 作者:热门IT资讯网编辑
编辑最后更新 2024年11月25日,在C#WINFORM或者是ASP.NET的WEB应用程序中,根据各种定时任务的需求,比如:每天的数据统计,每小时刷新系统缓存等等,这个时候我们得应用到定时器。经过多番查找搜索,终于找到一下比较好用的任

在C#WINFORM或者是ASP.NET的WEB应用程序中,根据各种定时任务的需求,比如:每天的数据统计,每小时刷新系统缓存等等,这个时候我们得应用到定时器。

经过多番查找搜索,终于找到一下比较好用的任务定时器-FluentScheduler,你可以通过Nuget来引用,用程序包管理器执行如下命令即可安装。

Install-Package FluentScheduler

此组件可以在C#和ASP.NET程序中使用,使用方法很简单,官方有使用案例:

FluentScheduler 中 对象: IJob(工作)、Registry(注册)、Schedule(计划)
  1. 首先做一个简单的实例

using FluentScheduler;/// ///  工作类/// public class MyJob : IJob{    public void Execute()    {         //编写需要工作的内容         //比如输出一句话         Console.WriteLine("执行工作!");    }}
using FluentScheduler; /// ///  注册表/// public class MyRegistry : Registry{       //无参构造函数    public MyRegistry()    {        //安排任务运行在一个区间        Schedule().ToRunNow().AndEvery(2).Seconds();                 // 安排任务运行一次,由一个特定的时间间隔延迟。        Schedule().ToRunOnceIn(5).Seconds();                 //安排一个简单的任务在一个特定的时间运行        Schedule(() => Console.WriteLine("Timed Task - Will run every day at 9:15pm: " + DateTime.Now)).ToRunEvery(1).Days().At(21, 15);                //安排一个更复杂的行动,立即运行和每月的时间间隔        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().AndThen().ToRunNow().AndEvery(5).Minutes();    }}

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

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

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

protected void Application_Start(){    JobManager.AddJob(t=>t.ToRunEvery(1).Days().At(24,00));//每天的凌晨12点 执行     JobManager.AddJob(t => t.ToRunEvery(1).Months().OnTheLastDay().At(8,30));//每个月的最后一天早上八点半 执行    JobManager.Start();//启动任务管理器}


0