Krav: En statisk logkø er defineret i projektet, og hver anmodning kan lægge beskeder i køen, og vi har brug for, at hjemmesiden åbner en baggrundsopgave til at behandle beskederne i denne kø.
Anmeldelse:
IHostedService-grænseflade
IHostedService-grænsefladen definerer to metoder for hostede objekter:
StartAsync(CancellationToken): Logikken, der bruges til at starte baggrundsopgaver.
StopAsync(CancellationToken): Udløses, når værten udfører en normal nedlukning, og indeholder logikken til at afslutte baggrundsopgaver.
BaggrundsService-baseklasse
BackgroundService er basisklassen, der bruges til at implementere langvarig IHostedService, kildekodeadressen:Hyperlink-login er synlig.
Kald ExecuteAsync(CancellationToken) for at køre baggrundstjenesten. Implementeringen returnerer en opgave, der repræsenterer hele baggrundstjenestens levetid. Ingen andre tjenester startes, før ExecuteAsync bliver asynkron, for eksempel ved at kalde await. Undgå at udføre lange blokeringsinitialiseringsopgaver i ExecuteAsync. StopAsync(CancellationToken) venter på, at ExecuteAsync bliver færdig.
Vi implementerer en baggrundsopgave til at printe loggen i en løkke, koden er som følger:
Registrer dig i servicetjenesten med følgende kode:
Registreringstilstanden er en singleton, som vist i figuren nedenfor:
Start projektet med resultatet som følger:
Brug en scoped service i en baggrundsopgave
For at bruge en scoped service i BackgroundService, opret et scope. Som standard oprettes der ingen scopes for managed services. Hvis du bruger en konstruktør direkte til at injicere et scoped objekt, er fejlen som følger:
Ubehandlet undtagelse. System.AggregateException: Nogle services kan ikke konstrueres (Fejl under validering af servicebeskrivelsen 'ServiceType: Microsoft.Extensions.Hosting.IHostedService Levetid: Singleton ImplementeringType: WebApplication2.Worker.TestServiceHostedService': Kan ikke forbruge scoped service 'WebApplication2.Worker.User' fra singleton ' Microsoft.Extensions.Hosting.IHostedService'.) Vi skal ændre koden som følger:
Henvisning:Hyperlink-login er synlig.
(Slut)
|