.Net Core定時調度hangfire:任務執行


1、隊列任務

隊列任務只執行在沒有異常的情況下僅處理一次,若發生異常,提供重試機制,異常及重試信息都會被記錄到數據庫中,通過Hangfire控制面板可以查看到這些信息。

可以通過 BackgroundJob.Enqueue() 方法來加載執行隊列任務:

BackgroundJob.Enqueue(() => Console.WriteLine("Hello, world!"));

2、延遲任務

延遲任務和隊列任務類似,就是在一定時間之后執行任務:

BackgroundJob.Schedule(() => Console.WriteLine("Hello, world"),TimeSpan.FromDays(1));

hangfire會在固定時間間隔中檢查調度,將任務調度到隊列中,這個時間間隔可以自己設置:

var options = new BackgroundJobServerOptions
{
    SchedulePollingInterval = TimeSpan.FromMinutes(1)
};
app.UseHangfireServer(options);

其他的如超時等設置也可以用 BackgroundJobServerOptions 來設置。

3、循環任務

 循環任務使用 RecurringJob.AddOrUpdate()  方法添加,如果存在即更新方法。通過 Cron 來設置定時執行時間。也可以指定時區:

RecurringJob.AddOrUpdate("powerfuljob", () => Console.Write("Powerful!"), "0 12 * */2", TimeZoneInfo.Local);

第一個參數為每個任務的唯一標識符區分大小寫,可以用 RemoveIfExists 方法來刪除重復操作,沒有重復操作不會報錯。

RecurringJob.RemoveIfExists("some-id");

通過 Trigger 方法可以立即執行循環任務,觸發調用的信息不會被記錄在循環任務本身中,它的下一次執行時間也不會從這次運行中重新計算。例如,如果您有一個在星期三運行的每周作業,並且您在星期五手動觸發它,它將在下一個星期三運行。

RecurringJob.Trigger("some-id");

4、延續任務

延續任務就是在一個任務執行后,緊接着繼續執行任務,通過 BackgroundJob.ContinueJobWith() 方法添加。

BackgroundJob.ContinueJobWith("powerfuljob", () => Console.WriteLine("Continuation!"));

第一個參數是父任務的唯一標識符,在此標識符的任務執行完成后,即執行我們后續的任務。

5、批處理

批處理要收費,就算啦,哈哈

6.傳遞參數與依賴

不管是隊列任務、延遲任務都有重載方法使用泛化來調用類中的方法,如下:

BackgroundJob.Enqueue<EmailSender>(x => x.Send(13, "Hello!"));

 參數傳遞用值類型,不能用out和ref。

7、取消令牌

在方法的執行中可以傳入 CancellationToken 大大降低了應用程序關閉時間和出現 ThreadAbortException。如下

BackgroundJob.Enqueue<IService>(x => x.LongRunningMethod(CancellationToken.None));
public async Task LongRunningMethod(CancellationToken token)
{
    for (var i = 0; i < Int32.MaxValue; i++)
    {
        await Task.Delay(TimeSpan.FromSeconds(1), token);
    }
}

專用后台進程監視所有具有取消令牌參數的方法的后台作業任務,並輪詢存儲以查看它們的當前狀態。當檢測到狀態改變或請求關閉時,相應的取消令牌的任務被取消。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM