4、Hangfire在AspNetCore中的使用(一)
前言:就是定時去執行某一個功能需求,最常見的就是定時去備份數據庫,或者去更新token
網上搜索定時執行會有很多方案,最多的就是通過Timer去實現,然后還有通過兄臺那個服務去實現,然后又繼續搜了下相關內容,發現個好用的,能完美匹配我的需求的,就是hangfire去實現。
一、Timer實現
public void s(){System.Timers.Timer timer = new System.Timers.Timer();timer.Enabled = true;timer.Interval = 60000;//執行間隔時間,單位為毫秒timer.Start();timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer1_Elapsed);timer.AutoReset = true; //一分鐘一次,保證每一分鐘都執行一次。} private void Timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e){//do your work}沒什么可說的,需要設置時間間隔,然后每一個時間間隔觸發事件去執行業務,代碼不簡潔,而且如果需求是每月一號去執行的話,這個就完犢子了,不好用,
二、windows服務
c#之添加window服務(定時任務) - 云+社區 - 騰訊云
上面這個是可以的,但是需要應用提供操作接口,去操作比如備份數據庫等功能需求。
三、Hangfire
3.1 簡介
Hangfire 是一款強大的.NET開源后臺任務利器,無需Windows服務/任務計劃程序,可以使用于ASP.NET 應用也可以使用于控制臺。Hangfire 只需簡單幾句代碼即可創建新的不同種類的任務。目前 Hangfire 已經支持.NET Core 。
GitHub:https://github.com/HangfireIO/Hangfire
官網:http://hangfire.io/?
相關文檔介紹:http://docs.hangfire.io/en/latest/
3.2 創建AspNetCore項目
此處筆者創建一個 Asp.NET Core Web API項目
3.3 安裝
引入nuget包 Hangfire.AspNetCore
版本很多,我先安裝這個?
3.4 配置
需要修改Startup類中的這兩處
如果需要對數據庫操作,需要添加對應的版本,筆者這里不需要對數據庫操作,因此不用添加數據庫版本,但是需要操作內存,因此在添加個Hangfire.MemoryStorage程序包
3.5 寫配置
ConfigureServices?配置代碼:
public void ConfigureServices(IServiceCollection services) {//使用內存做持久化,有數據庫的可以添加數據庫程序包,然后修改這里配置就可以了services.AddHangfire(x => x.UseStorage(new MemoryStorage())); }Configure?添加配置代碼:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {//2.0版本后不在Configure中實現,需要在ConfigureServices中添加服務//這也是為什么這里會報警的原因app.UseHangfireServer();//啟動hangfire面板app.UseHangfireDashboard();RecurringJob.AddOrUpdate(() => Console.WriteLine("Recurring!"), Cron.Minutely()); }這是網上的代碼,有兩點問題
1、方法簽名即將過時,后續發布的2.0版本將采用新的函數接口,具體的修改可根據提示來修改,很簡單,這里不再贅述。
2、正常情況,使用Cron.Minutely()函數是表示每分鐘執行一次,但是這里沒有執行,需要再添加一個參數,TimeZoneInfo.Local
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {app.UseHangfireServer();app.UseHangfireDashboard();var strDate=DateTime.Now.ToString();RecurringJob.AddOrUpdate(() => Recurring(), Cron.Minutely(), TimeZoneInfo.Local); } //說明,此處必須得是public的,不然,RecurringJob.AddOrUpdate不能調用這個函數,會報錯public void Recurring(){var strDate=DateTime.Now.ToString();Console.WriteLine("{0},{1}","每分鐘調一次",strDate);}可以看到是定時執行的。
3.6?Cron
很靈活,想實現什么定時需求調用那個函數簽名就可以,包括2.0版本后需要自己寫表達式,具體的可以參考這篇文章【轉】cron表達式詳解 - 我只吃大碗 - 博客園
3.7 面板
地址:https://localhost:5001/hangfire
這里要根據自己的地址來,默認是hangfire,訪問Hangfire的dashboard頁面,看一下任務的執行情況。
?
總結
以上是生活随笔為你收集整理的4、Hangfire在AspNetCore中的使用(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 变色镜片市场需求广大
- 下一篇: 刺猬文│以太坊交易信息解析方法