日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

4、Hangfire在AspNetCore中的使用(一)

發布時間:2024/1/8 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中的使用(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。