FluentScheduler是一個簡單的任務調度框架,使用起來非常方便。作者的源碼和例子的地址:
https://github.com/fluentscheduler/FluentScheduler
1.首先引用FluentScheduler.dll,dll數據源可通過NuGet程序包獲取。打開管理解決方案的NuGet程序包,輸入FluentScheduler即可。
步驟:狀態欄選擇 工具 - NuGet程序包管理器 – 管理解決方案的NuGet程序包,然后輸入FluentScheduler即可。

2.新建Registry繼承類
using System; using FluentScheduler; using System.Threading; namespace DemoProject2020 { public class TimingRoutine:Registry { public TimingRoutine() { Welcome(); } private void Welcome() { // 每2秒一次循環 Schedule<TaskJob>().ToRunNow().AndEvery(2).Seconds(); // 5秒后,只一次 Schedule<TaskJob>().ToRunOnceIn(5).Seconds(); //每天晚上21:15分執行 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); //先執行第一個Job、再執行第二個Job;完成后等5秒繼續循環 Schedule<TaskJob>().AndThen<TaskJob>().ToRunNow().AndEvery(5).Seconds(); //直接運行 Schedule(() => Console.Write("3, ")) .WithName("[welcome]") .AndThen(() => Console.Write("2, ")) .AndThen(() => Console.Write("1, ")) .AndThen(() => Console.WriteLine("Live!")); } } }
3.新建調用任務類繼承IJob
using System; using System.IO; using FluentScheduler; namespace DemoProject2020 { public class TaskJob:IJob { void IJob.Execute() { var str = "循環每2秒執行一次;現在時間是:" + DateTime.Now.ToString(); System.IO.StreamWriter writer = null; try { //寫入日志 string path= Server.MapPath("~/logs"); ; //不存在則創建錯誤日志文件夾 if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } path += string.Format(@"\{0}.txt", DateTime.Now.ToString("yyyy-MM-dd")); writer = !System.IO.File.Exists(path) ? System.IO.File.CreateText(path) : System.IO.File.AppendText(path); //判斷文件是否存在,如果不存在則創建,存在則添加 writer.WriteLine(str); writer.WriteLine("********************************************************************************************"); } finally { if (writer != null) { writer.Close(); } } } } }
4.新建Global.asax,全局應用程序處理類

Global.asax添加注冊定時程序
protected void Application_Start(object sender, EventArgs e) { //注冊定時任務 JobManager.Initialize(new TimingRoutine()); }
補充:
Let's suppose it's 10:00 of a Monday morning and you want to start a job that runs every Monday at 14:00. Should the first run of your job be today or only on the next week Monday? If you want the former (not waiting for a whole week): 如果想每周一10點運行,那個你選擇現在就開始你的任務還是下周一再進行執行,如果現在開始,而不是等一周后執行 // Every "zero" weeks Schedule<MyJob>().ToRunEvery(0).Weeks().On(DayOfWeek.Monday).At(14, 0); Or if you want the latter (making sure that at least one week has passed): 如果選擇下周一執行,確保至少一周已經過去。 // Every "one" weeks Schedule<MyJob>().ToRunEvery(1).Weeks().On(DayOfWeek.Monday).At(14, 0);
