Wymagania: W projekcie zdefiniowana jest statyczna kolejka logów, a każde żądanie może umieszczać wiadomości w kolejce, a strona internetowa musi otworzyć zadanie w tle, aby przetworzyć wiadomości w tej kolejce.
Recenzja:
Interfejs IHostedService
Interfejs IHostedService definiuje dwie metody dla obiektów hostowanych:
StartAsync(CancelToken): Logika używana do uruchamiania zadań w tle.
StopAsync(CancellationToken): Wyzwalany podczas normalnego wyłączania przez hosta, zawierającego logikę do zakończenia zadań w tle.
TłoKlasa bazowa Serwisu
BackgroundService to klasa bazowa używana do implementacji długoletniego IHostedService, czyli adresu kodu źródłowego:Logowanie do linku jest widoczne.
Zadbani ExecuteAsync(CancellationToken), aby uruchomić usługę w tle. Implementacja zwraca zadanie reprezentujące cały okres życia usługi w tle. Żadne inne usługi nie są uruchamiane, dopóki ExecuteAsync nie stanie się asynchroniczny, na przykład przez wywołanie await. Unikaj wykonywania długich zadań inicjalizacyjnych blokujących w ExecuteAsync. StopAsync(CancellationToken) czeka na zakończenie ExecuteAsync.
Implementujemy zadanie w tle, które polega na wydrukowaniu logu w pętli, a kod wygląda następująco:
Zarejestruj się w usłudze serwisowej z następującym kodem:
Tryb rejestracji to singleton, jak pokazano na poniższym rysunku:
Rozpocznij projekt od wyników następującymi:
Użyj usługi o ograniczonym zakresie, w zadaniu w tle
Aby użyć usługi o skali w BackgroundService, należy utworzyć zakres. Domyślnie nie tworzą się zakresów dla usług zarządzanych. Jeśli użyjesz konstruktora bezpośrednio do wstrzyknięcia obiektu z zakresem skalacji, błąd wygląda następująco:
Wyjątek nieobsługiwany. System.AggregateException: Niektóre usługi nie są w stanie zostać zbudowane (Błąd podczas weryfikacji deskryptora usługi 'ServiceType: Microsoft.Extensions.Hosting.IHostedService' Lifetime: Singleton ImplementationType: WebApplication2.Worker.TestServiceHostedService': Nie można korzystać z usługi scope service 'WebApplication2.Worker.User' z singleton ' Microsoft.Extensions.Hosting.IHostedService'.) Musimy zmodyfikować kod w następujący sposób:
Odniesienie:Logowanie do linku jest widoczne.
(Koniec)
|