ASP.NET Core通用主機(jī)實(shí)現(xiàn)托管服務(wù)
前文介紹了.Net core的通用主機(jī)的配置,在基礎(chǔ)配置完成后,下一步就是注冊我們的后臺任務(wù)了。.net core提供了一個(gè)通用的后臺服務(wù)接口IHostedService,稱為托管服務(wù)。一個(gè)注冊托管服務(wù)的示例如下:
hostBuilder.ConfigureServices((hostContext, services) => { services.AddHostedService<LifetimeEventsHostedService>(); services.AddHostedService<TimedHostedService>(); });
而一個(gè)托管服務(wù)的簡單實(shí)現(xiàn)如下:
class MyHostedService :IHostedService { public Task StartAsync(CancellationToken cancellationToken) { return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { return Task.CompletedTask; } }
每個(gè) IHostedService 實(shí)現(xiàn)都按照 ConfigureServices 中服務(wù)注冊的順序執(zhí)行。 主機(jī)啟動(dòng)時(shí),每個(gè) IHostedService 上都會(huì)調(diào)用 StartAsync。主機(jī)正常關(guān)閉時(shí),以反向注冊順序調(diào)用 StopAsync。相比傳統(tǒng)的后臺任務(wù),這里就提供了一個(gè)好處:在服務(wù)終止的時(shí)候可以優(yōu)雅的關(guān)閉(graceful close)。
另外,由于使用了DI框架,可以在托管服務(wù)的構(gòu)造函數(shù)中很方便的獲取其它服務(wù):
public MyHostedService(IHostEnvironment env, IHostApplicationLifetime appLifetime) { }
IHostingEnvironment
IHostingEnvironment主要用來提供App的環(huán)境信息,具體就不多介紹了。
IApplicationLifetime
IApplicationLifetime是托管服務(wù)經(jīng)常引入的一個(gè)服務(wù),它允許獲取應(yīng)用的啟動(dòng)和關(guān)閉事件,并且能關(guān)閉整個(gè)主機(jī),具體接口如下:
事件訂閱:
ApplicationStarted:主機(jī)已完全啟動(dòng)。
ApplicationStopped:主機(jī)正在完成正常關(guān)閉。 應(yīng)處理所有請求。 關(guān)閉受到阻止,直到完成此事件。
ApplicationStopping:主機(jī)正在執(zhí)行正常關(guān)閉。 仍在處理請求。 關(guān)閉受到阻止,直到完成此事件。
操作:
StopApplication:關(guān)閉整個(gè)主機(jī)
BackgroundService
很多時(shí)候,我們后臺服務(wù)往往只是一個(gè)簡單的任務(wù),并不需要關(guān)閉,此時(shí)可以使用一個(gè)更簡單的模型:BackgroundService
class MyHostedService : BackgroundService { protected override Task ExecuteAsync(CancellationToken stoppingToken) { //do something return Task.CompletedTask; } }
它本身是IHostedService的一個(gè)實(shí)現(xiàn),但進(jìn)一步簡化了程序功能,只提供一個(gè)ExecuteAsync接口,我們只需要在該函數(shù)中實(shí)現(xiàn)后臺任務(wù)即可。
到此這篇關(guān)于ASP.NET Core通用主機(jī)實(shí)現(xiàn)托管服務(wù)的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
.net實(shí)現(xiàn)網(wǎng)站用戶登錄認(rèn)證
本文給大家介紹的是.net實(shí)現(xiàn)網(wǎng)站用戶登錄認(rèn)證的方法和實(shí)例,都非常的簡單實(shí)用,需要的小伙伴可以參考下。2015-11-11ASP.NET MVC運(yùn)行出現(xiàn)Uncaught TypeError: Cannot set property __MVC
同一相站點(diǎn),有些頁面的客戶端驗(yàn)證能工作,而有些死活不行。打開頁面就出現(xiàn)Uncaught TypeError: Cannot set property __MVC_FormValidation of null錯(cuò)誤2010-04-04Asp.net之TextBox只允許輸入數(shù)字的方法總結(jié)
Asp.net之TextBox只允許輸入數(shù)字的方法總結(jié),需要的朋友可以參考一下2013-02-02ASP.NET Core MVC基礎(chǔ)學(xué)習(xí)之局部視圖(Partial Views)
這篇文章主要給大家介紹了關(guān)于ASP.NET Core MVC基礎(chǔ)學(xué)習(xí)之局部視圖(Partial Views)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用ASP.NET Core MVC具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08EF使用Code First模式給實(shí)體類添加復(fù)合主鍵
這篇文章介紹了EF使用Code First模式給實(shí)體類添加復(fù)合主鍵的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03Asp .net 調(diào)用帶參數(shù)的存儲過程
本文主要介紹了Asp .net 調(diào)用帶參數(shù)的存儲過程的相關(guān)知識。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-03-03.netcore 寫快遞100的快遞物流信息查詢接口的實(shí)現(xiàn)
這篇文章主要介紹了.netcore 寫快遞100的快遞物流信息查詢接口,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04ASP.NET?Core應(yīng)用JWT進(jìn)行用戶認(rèn)證及Token的刷新方案
本文詳細(xì)講解了ASP.NET?Core應(yīng)用JWT進(jìn)行用戶認(rèn)證及Token的刷新方案,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12