|
|
Veröffentlicht am 20.5.2023, 22:51:51
|
|
|
|

Anforderungen: Im Projekt ist eine statische Log-Warteschlange definiert, und jede Anfrage kann Nachrichten in die Warteschlange legen; die Website muss eine Hintergrund-Aufgabe öffnen, um die Nachrichten in dieser Warteschlange zu verarbeiten.
Rezension:
IHostedService-Schnittstelle
Die IHostedService-Schnittstelle definiert zwei Methoden für gehostete Objekte:
StartAsync(CancellationToken): Die Logik, die verwendet wird, um Hintergrundaufgaben zu starten.
StopAsync(CancellationToken): Wird ausgelöst, wenn der Host einen normalen Shutdown durchführt, der die Logik enthält, um Hintergrundaufgaben zu beenden.
HintergrundService-Basisklasse
BackgroundService ist die Basisklasse, die zur Implementierung des langlebigen IHostedService verwendet wird, also der Quellcodeadresse:Der Hyperlink-Login ist sichtbar.
Rufen Sie ExecuteAsync(CancellationToken) auf, um den Hintergrunddienst auszuführen. Die Implementierung gibt eine Aufgabe zurück, die die gesamte Lebensdauer des Hintergrunddienstes repräsentiert. Keine anderen Dienste werden gestartet, bis ExecuteAsync asynchron wird, zum Beispiel durch das Aufrufen von await. Vermeiden Sie es, lange blockierende Initialisierungsaufgaben in ExecuteAsync durchzuführen. StopAsync (CancellationToken) wartet darauf, dass ExecuteAsync abgeschlossen ist.
Wir implementieren eine Hintergrundaufgabe, um das Log in einer Schleife auszudrucken, der Code ist wie folgt:
Registrieren Sie sich im Servicedienst mit folgendem Code:
Der Registrierungsmodus ist ein Singleton, wie in der untenstehenden Abbildung gezeigt:
Starte das Projekt mit der Ausgabe wie folgt:
Verwenden Sie einen Scoped Service in einer Hintergrundaufgabe
Um einen scoped Service im BackgroundService zu verwenden, erstellen Sie einen Scope. Standardmäßig werden für verwaltete Dienste keine Scopes erstellt. Wenn Sie direkt einen Konstruktor verwenden, um ein scoped Object einzuspeisen, lautet der Fehler wie folgt:
Unbearbeitete Ausnahme. System.AggregateException: Einige Dienste können nicht erstellt werden (Fehler beim Validieren des Service-Deskriptors 'ServiceType: Microsoft.Extensions.Hosting.IHostedService) Lebenszeit: Singleton-ImplementierungTyp: WebApplication2.Worker.TestServiceHostedService': Kann den scoped Service 'WebApplication2.Worker.User' von singleton nicht konsumieren Microsoft.Extensions.Hosting.IHostedService'.) Wir müssen den Code wie folgt modifizieren:
Referenz:Der Hyperlink-Login ist sichtbar.
(Ende)
|
Vorhergehend:OData – OData vs GraphQLNächster:LiteDB Embedded Database for .NET Tutorial
|