如何在ASP.Net Core中使用 IHostedService的方法
在我們應(yīng)用程序中常常會(huì)有一些執(zhí)行后臺(tái)任務(wù)和任務(wù)調(diào)度的需求,那如何在 ASP.Net Core 中實(shí)現(xiàn)呢? 可以利用 Azure WebJobs 或者其他一些第三方任務(wù)調(diào)度框架,如:Quartz 和 Hangfire。
在 ASP.Net Core 中,也可以將 后臺(tái)任務(wù) 作為托管服務(wù)的模式,所謂的 托管服務(wù) 只需要實(shí)現(xiàn)框架中的 IHostedService 接口并囊括進(jìn)你需要的業(yè)務(wù)邏輯作為后臺(tái)任務(wù),這篇文章將會(huì)討論如何在 ASP.Net Core 中構(gòu)建托管服務(wù)。
創(chuàng)建托管服務(wù)
要想創(chuàng)建托管服務(wù),只需要實(shí)現(xiàn) IHostedService 接口即可,下面就是 IHostedService 接口的聲明。
public interface IHostedService { Task StartAsync(CancellationToken cancellationToken); Task StopAsync(CancellationToken cancellationToken); }
這一節(jié)中我們在 ASP.Net Core 中做一個(gè)極簡版的 托管服務(wù), 首先自定義一個(gè) MyFirstHostedService 托管類,代碼如下:
public class MyFirstHostedService : IHostedService { protected async override Task ExecuteAsync(CancellationToken token) { throw new NotImplementedException(); } }
創(chuàng)建 BackgroundService
有一點(diǎn)要注意,上一節(jié)的 MyFirstHostedService 實(shí)現(xiàn)了 IHostedService 接口,實(shí)際開發(fā)中并不需要這樣做,因?yàn)?.Net Core 中已經(jīng)提供了抽象類 BackgroundService,所以接下來重寫抽象類的 ExecuteAsync 方法即可,如下代碼所示:
public class MyFirstHostedService : BackgroundService { protected async override Task ExecuteAsync(CancellationToken token) { throw new NotImplementedException(); } }
下面的代碼片段展示了一個(gè)簡單的 Log 方法,用于記錄當(dāng)前時(shí)間到文件中,這個(gè)方法由 托管服務(wù) 觸發(fā)。
private async Task Log() { using (StreamWriter sw = new StreamWriter(@"D:\log.txt",true)) { await sw.WriteLineAsync(DateTime.Now.ToLongTimeString()); } }
使用 ExecuteAsync 方法
接下來看看如何實(shí)現(xiàn) ExecuteAsync 方法,這個(gè)方法的邏輯就是周期性(second/s)的調(diào)用 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()); } } } }
托管服務(wù)注冊
托管服務(wù)類已經(jīng)寫好了,要想注入到 Asp.NET Core 中,需要在 Startup.ConfigureServices 中將 托管服務(wù)類 注入到 ServiceCollection 中,如下代碼所示:
public void ConfigureServices(IServiceCollection services) { services.AddHostedService<MyFirstHostedService>(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }
當(dāng)把應(yīng)用程序跑起來后,你會(huì)看見程序每秒都會(huì)往 D:\log.txt 文件中記錄日志。
在 IHostedService 中提供的 StartAsync 和 StopAsync 可用于在 ASP.NET Core 中執(zhí)行或停止后臺(tái)任務(wù),你可以用它在你的應(yīng)用程序中更新數(shù)據(jù)或其他操作,還有這些周期性業(yè)務(wù)邏輯是跑在后臺(tái)線程中的,這樣就不會(huì)導(dǎo)致主請求線程的阻塞。
譯文鏈接:https://www.infoworld.com/article/3390741/how-to-use-ihostedservice-in-aspnet-core.html
到此這篇關(guān)于如何在ASP.Net Core中使用 IHostedService的方法的文章就介紹到這了,更多相關(guān)ASP.Net Core使用 IHostedService內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
批量刪除記錄時(shí)如何實(shí)現(xiàn)全選方法總結(jié)
批量刪除記錄時(shí)如何實(shí)現(xiàn)全選方法總結(jié)...2007-04-04ASP.NET數(shù)據(jù)庫編程之處理文件訪問許可
ASP.NET數(shù)據(jù)庫編程之處理文件訪問許可...2006-09-09.NET 與樹莓派WS28XX 燈帶的顏色漸變動(dòng)畫效果的實(shí)現(xiàn)
所謂顏色漸變動(dòng)畫,首先,你要確定兩種顏色——起始色和最終色,比如從綠色變成紅色,綠色是起始,紅色是終點(diǎn)。這篇文章主要介紹了.NET 與樹莓派WS28XX 燈帶的顏色漸變動(dòng)畫,需要的朋友可以參考下2021-12-12.NET微信開發(fā)之PC 端微信掃碼注冊和登錄功能實(shí)現(xiàn)
這篇文章主要介紹了.NET微信開發(fā)之PC 端微信掃碼注冊和登錄功能實(shí)現(xiàn)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09Repeater綁定dictionary數(shù)據(jù)源代碼及報(bào)錯(cuò)解決
為大家講解下Repeater綁定dictionary數(shù)據(jù)源以及報(bào)錯(cuò)處理的方法,感興趣的朋友可以參考下哈,希望對你有所幫助2013-04-04在Code First模式中自動(dòng)創(chuàng)建Entity模型
這篇文章介紹了在Code First模式中自動(dòng)創(chuàng)建Entity模型的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06