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

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

Install-PackageFluentScheduler

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

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

首先做一个简单的实例

usingFluentScheduler;///<summary>///工作类///</summary>publicclassMyJob:IJob{publicvoidExecute(){//编写需要工作的内容//比如输出一句话Console.WriteLine("执行工作!");}}

usingFluentScheduler;///<summary>///注册表///</summary>publicclassMyRegistry:Registry{//无参构造函数publicMyRegistry(){//安排任务运行在一个区间Schedule<MyJob>().ToRunNow().AndEvery(2).Seconds();//安排任务运行一次,由一个特定的时间间隔延迟。Schedule<MyJob>().ToRunOnceIn(5).Seconds();//安排一个简单的任务在一个特定的时间运行Schedule(()=>Console.WriteLine("TimedTask-Willruneverydayat9:15pm:"+DateTime.Now)).ToRunEvery(1).Days().At(21,15);//安排一个更复杂的行动,立即运行和每月的时间间隔Schedule(()=>{Console.WriteLine("ComplexActionTaskStarts:"+DateTime.Now);Thread.Sleep(1000);Console.WriteLine("ComplexActionTaskEnds:"+DateTime.Now);}).ToRunNow().AndEvery(1).Months().OnTheFirst(DayOfWeek.Monday).At(3,0);//计划多个任务在一个单一的日程安排中运行Schedule<MyJob>().AndThen<MyOtherJob>().ToRunNow().AndEvery(5).Minutes();}}

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

protectedvoidApplication_Start(){JobManager.Initialize(newMyRegistry());}

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

protectedvoidApplication_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();//启动任务管理器}