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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

如何在 .Net Core 中使用 IHostedService

發布時間:2023/12/4 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在 .Net Core 中使用 IHostedService 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在我們應用程序中常常會有一些執行后臺任務和任務調度的需求,那如何在 ASP.Net Core 中實現呢?可以利用 Azure WebJobs 或者其他一些第三方任務調度框架,如:Quartz 和 Hangfire。

在 ASP.Net Core 中,也可以將 后臺任務 作為托管服務的模式,所謂的 托管服務 只需要實現框架中的 IHostedService 接口并囊括進你需要的業務邏輯作為后臺任務,這篇文章將會討論如何在 ASP.Net Core 中構建托管服務。

創建托管服務

要想創建托管服務,只需要實現 IHostedService 接口即可,下面就是 IHostedService 接口的聲明。

public?interface?IHostedService {Task?StartAsync(CancellationToken?cancellationToken);Task?StopAsync(CancellationToken?cancellationToken); }

這一節中我們在 ASP.Net Core 中做一個極簡版的 托管服務, 首先自定義一個 MyFirstHostedService 托管類,代碼如下:

public?class?MyFirstHostedService?:?IHostedService{protected?async?override?Task?ExecuteAsync(CancellationToken?token){throw?new?NotImplementedException();}}

創建 BackgroundService

有一點要注意,上一節的 MyFirstHostedService 實現了 IHostedService 接口,實際開發中并不需要這樣做,因為 .Net Core 中已經提供了抽象類 BackgroundService,所以接下來重寫抽象類的 ExecuteAsync 方法即可,如下代碼所示:

public?class?MyFirstHostedService?:?BackgroundService{protected?async?override?Task?ExecuteAsync(CancellationToken?token){throw?new?NotImplementedException();}}

下面的代碼片段展示了一個簡單的 Log 方法,用于記錄當前時間到文件中,這個方法由 托管服務 觸發。

private?async?Task?Log(){using?(StreamWriter?sw?=?new?StreamWriter(@"D:\log.txt",true)){await?sw.WriteLineAsync(DateTime.Now.ToLongTimeString());}}

使用 ExecuteAsync 方法

接下來看看如何實現 ExecuteAsync 方法,這個方法的邏輯就是周期性(second/s)的調用 Log() 方法,如下代碼所示:

protected?async?override?Task?ExecuteAsync(CancellationToken?token){while?(!token.IsCancellationRequested){await?Log();await?Task.Delay(1000,?token);}}

好了,下面是完整的 MyFirstHostedService 類代碼,僅供參考。

using?Microsoft.Extensions.Hosting; using?System; using?System.IO; using?System.Threading; using?System.Threading.Tasks; namespace?HostedServicesApp {public?class?MyFirstHostedService?:?BackgroundService{protected?async?override?Task?ExecuteAsync(CancellationToken?token){while?(!token.IsCancellationRequested){await?Log();await?Task.Delay(1000,?token);}}private?async?Task?Log(){using?(StreamWriter?sw?=?new?StreamWriter(@"D:\log.txt",true)){await?sw.WriteLineAsync(DateTime.Now.ToLongTimeString());}}}?? }

托管服務注冊

托管服務類已經寫好了,要想注入到 Asp.NET Core 中,需要在 Startup.ConfigureServices 中將 托管服務類 注入到 ServiceCollection 中,如下代碼所示:

public?void?ConfigureServices(IServiceCollection?services){services.AddHostedService<MyFirstHostedService>();services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);}?

當把應用程序跑起來后,你會看見程序每秒都會往 ?D:\log.txt 文件中記錄日志。

在 IHostedService 中提供的 StartAsync 和 StopAsync 可用于在 ASP.NET Core 中執行或停止后臺任務,你可以用它在你的應用程序中更新數據或其他操作,還有這些周期性業務邏輯是跑在后臺線程中的,這樣就不會導致主請求線程的阻塞。

譯文鏈接:https://www.infoworld.com/article/3390741/how-to-use-ihostedservice-in-aspnet-core.html

總結

以上是生活随笔為你收集整理的如何在 .Net Core 中使用 IHostedService的全部內容,希望文章能夠幫你解決所遇到的問題。

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