天天看點

C# 任務排程神器 FluentScheduler

最近幾天在寫一些自動執行的程式,按照古老的做法就是做成exe可執行檔案,并且在任務執行完自動退出。然後用Windows的Task Scheduler按照要求設定執行時間和執行頻率,可以做到近乎所有能想到的執行Job。

C# 任務排程神器 FluentScheduler

但是有一些很頻繁的任務,秒級别的,這個就實作不了了,傳統的做法是隻能打包成服務,安裝到伺服器上執行。

今天在網上突然發現了這個神器,FluentSchedule,直接在Nuget裡搜尋安裝,調用特别友善,簡直是任務排程的神器!

FluentScheduler 中 對象: IJob(工作)、Registry(注冊)、Schedule(計劃)

首先做一個簡單的執行個體

using FluentScheduler;
/// <summary>
///  工作類
/// </summary>
public class MyJob : IJob
{
    public void Execute()
    {
         //編寫需要工作的内容
         //比如輸出一句話
         Console.WriteLine("執行工作!");
    }
}
using FluentScheduler; 
/// <summary>
///  系統資料庫
/// </summary>
public class MyRegistry : Registry
{   
    //無參構造函數
    public MyRegistry()
    {
        //安排任務運作在一個區間
        Schedule<MyJob>().ToRunNow().AndEvery(2).Seconds(); 
        
        // 安排任務運作一次,由一個特定的時間間隔延遲。
        Schedule<MyJob>().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<MyJob>().AndThen<MyOtherJob>().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();//啟動任務管理器
 }           

複制