介紹
Hangfire是.NET平臺和.net core平臺下的一個優秀的開源定時任務框架,它可以方便輕松地將定時任務集成到你的程序中,而且功能強大,。支持CPU和I / O密集型,長期運行和短期運行的后端作業。無需windows服務/任務計劃程序。提供redis,SQL Server,SQL Azure和MSMQ持久化的支持。同事還提供了集成了本地化的可視化界面可以優雅的對任務進行手動管理,且支持中文界面。

Github地址
https://github.com/HangfireIO/Hangfire
如何安裝使用?
在.net 和.net core的C#應用程序中,最方便我們使用的第三方庫管理莫過于Nuget了,因此你可以簡單的搜索HangFire,截止發文日期,版本是1.7.6,如下圖:

或者在程序包管理器中執行以下命令,兩種方式隨心所欲
Install-Package Hangfire
快速開始
以下是一個最簡單的代碼片段,用于配置HangFire,代碼是以SQLServer為例的
public void Configuration(IAppBuilder app) { GlobalConfiguration.Configuration.UseSqlServerStorage("<connection string or its name>"); app.UseHangfireServer(); app.UseHangfireDashboard(); }
功能簡介
本文不涉及如何在具體的應用程序如何調用,以下是對其功能進行簡單的介紹,也是官方Github上提及的一些常用功能。
- 即發即消失的任務
BackgroundJob.Enqueue(() => Console.WriteLine("Simple!"));
- 延時任務
僅在給定的時間后執行的計劃的后臺任務
BackgroundJob.Schedule(() => Console.WriteLine("Reliable!"), TimeSpan.FromDays(7));
- 重復的定時任務
重復性的任務就是這么簡單,只需調用以下方法即可使用CRON表達式執行任何類型的重復任務,由于支持CRON表達式,所以其是支持到秒級的
RecurringJob.AddOrUpdate(() => Console.WriteLine("Transparent!"), Cron.Daily);
- 多任務相互協作
允許多個任務之間相互調度,完成更加復雜的調度任務
var id = BackgroundJob.Enqueue(() => Console.WriteLine("Hello, ")); BackgroundJob.ContinueWith(id, () => Console.WriteLine("world!"));
Web作業
你可以在任何兼容OWIN的應用程序框架中處理后臺任務,包括ASP.NET MVC,ASP.NET Web API,FubuMvc,Nancy等。
app.UseHangfireServer();
在控制臺應用程序,Windows服務,Azure Worker Role等中:
using (new BackgroundJobServer()) { Console.WriteLine("Hangfire Server started. Press ENTER to exit..."); Console.ReadLine(); }
使用情況
以下一些截圖是筆者配置在進行中的項目中的一個實例,簡單的對其管理面板有一個了解
- 儀表盤對其任務執行情況一目了然

- 作業隊列一覽
任務隊列包括計劃的任務、執行中的任務、完成的任務、失敗的任務、刪除的任務、以及等待中的任務,

還可以查看執行情況以便于是否需要手動重試

- 周期任務的列表管理
定時的周期性任務,在這里很清晰,而且可以手動執行,筆者目前就干了一件事,因為項目初期手動維護一部分基礎數據是很有可能的,為了防止一些基礎數據緩存的及時性,在更新完數據庫后可手動執行任務重建緩存,目前一個任務定了一個月時間,這樣就不必每次都重新啟動應用程序了。

- 運行的服務器
由于HangFire是分布式的,可以再儀表盤看到運行的服務器

總結
HangFire絕對是一個值得使用的分布式任務框架,社區版永久免費,即使是商用情況下也是免費的,大多數情況下社區版本已經夠用,除非你有非常復雜的任務需要實現,也可以通過收費版本的,支持的功能更強大!如果你還有更好的推薦可以在評論區留言分享!
