Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
BackgroundService nyní běží celý na vlákně ExecuteAsync na pozadí. Dříve se synchronní část ExecuteAsync (před prvním await) spouštěla na hlavním vlákně během spouštění služby, což blokovalo spuštění jiných služeb. Pouze kód po prvním await běžel na vlákně na pozadí.
Verze byla představena
.NET 10
Předchozí chování
Dříve běžela synchronní část ExecuteAsync na hlavním vlákně a blokovala spouštění jiných služeb.
Nové chování
Počínaje verzí .NET 10, všechny ExecuteAsync běží na vlákně na pozadí a ani jedna jeho část nezablokuje spuštění jiných služeb.
Typ zásadní změny
Tato změna je změna chování.
Důvod změny
Předchozí chování bylo běžnou nástrahou, které nesplnilo očekávání uživatelů. Většina implementátorů BackgroundService nepochopila, že synchronní část před prvním await blokovala spuštění ostatních služeb během startu aplikace.
Doporučená akce
Pokud potřebujete, aby se některá část vašeho BackgroundService.ExecuteAsync spustila dříve během startu (synchronně a blokovala ostatní služby), můžete udělat následující:
- Umístěte kód, který je potřeba spustit synchronně v konstruktoru, a spustí se jako součást konstrukce služby.
- Přepište
StartAsynca proveďte nějakou práci před volánímbase.StartAsync.StartAsynczachovává chování, že jeho synchronní část probíhá synchronně při spuštění systému a blokuje spuštění jiných služeb. - Pokud chcete spustit kód v konkrétnější době během spouštění služby, implementujte Microsoft.Extensions.Hosting.IHostedLifecycleService na svém
BackgroundService. - Vzdejte se
BackgroundServicezcela a implementujte svůj vlastní Microsoft.Extensions.Hosting.IHostedService.