Zahteve: V projektu je definirana statična čakalna vrsta dnevnikov, pri čemer lahko vsaka zahteva vključi sporočila v vrsto, spletna stran pa mora odpreti ozadno nalogo za obdelavo sporočil v tej vrsti.
Pregled:
Vmesnik IHostedService
Vmesnik IHostedService definira dve metodi za gostovane objekte:
StartAsync(CancellationToken): Logika, ki se uporablja za začetek ozadnih nalog.
StopAsync(CancellationToken): Sproži se, ko gostitelj izvede običajen izklop, ki vsebuje logiko za zaključek ozadnih opravil.
Osnovni razred ozadja Storitve
BackgroundService je osnovni razred, ki se uporablja za implementacijo dolgoletnega IHostedService, naslova izvorne kode:Prijava do hiperpovezave je vidna.
Pokliči ExecuteAsync (CancellationToken) za zagon storitve v ozadju. Implementacija vrne nalogo, ki predstavlja celotno življenjsko dobo storitve v ozadju. Nobenih drugih storitev se ne začne, dokler ExecuteAsync ne postane asinhron, na primer z klicem await. Izogibajte se izvajanju dolgih inicializacijskih nalog blokiranja v ExecuteAsync. StopAsync(CancellationToken) čaka, da se ExecuteAsync zaključi.
Implementiramo ozadno nalogo za tiskanje dnevnika v zanki, koda je naslednja:
Registrirajte se v storitveni storitvi z naslednjo kodo:
Način registracije je enojni, kot je prikazano na spodnji sliki:
Projekt začnite z izhodom takole:
Uporabite scoped storitev v ozadju naloge
Za uporabo scoped storitve v BackgroundService ustvarite scope. Privzeto za upravljane storitve niso ustvarjeni obsegi. Če uporabite konstruktor neposredno za vbrizg objekta s scope, je napaka naslednja:
Neobdelana izjema. System.AggregateException: Nekaterih storitev ni mogoče sestaviti (Napaka med preverjanjem opisa storitve 'ServiceType: Microsoft.Extensions.Hosting.IHostedService' Življenjska doba: Singleton ImplementacijaTip: WebApplication2.Worker.TestServiceHostedService': Ne more uporabljati scoped storitve 'WebApplication2.Worker.User' iz singleton ' Microsoft.Extensions.Hosting.IHostedService'.) Kodo moramo spremeniti na naslednji način:
Referenčni:Prijava do hiperpovezave je vidna.
(Konec)
|