Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Wanneer een BackgroundService fout optreedt met een uitzondering van ExecuteAsync de methode en HostOptions.BackgroundServiceExceptionBehavior is ingesteld op StopHost (de standaardinstelling), stopt de host. In .NET 11 falen de taken die worden geretourneerd door RunAsync, StopAsync, WaitForShutdownAsync en hun synchrone equivalenten nu met een uitzondering in plaats van succesvol te voltooien.
Geïntroduceerde versie
.NET 11 preview 3
Vorig gedrag
Voorheen, toen een BackgroundService uitzondering vanuit zijn ExecuteAsync-methode wierp en HostOptions.BackgroundServiceExceptionBehavior werd ingesteld op BackgroundServiceExceptionBehavior.StopHost, werd de taak geretourneerd door een aanroep van RunAsync, StopAsync of WaitForShutdownAsync en succesvol voltooid. Dit betekende meestal dat de toepassing werd afgesloten met een geslaagde afsluitcode (nul).
Nieuw gedrag
Vanaf .NET 11, wanneer een BackgroundService een uitzondering genereert in de methode ExecuteAsync en HostOptions.BackgroundServiceExceptionBehavior is ingesteld op BackgroundServiceExceptionBehavior.StopHost, mislukt de taak die wordt geretourneerd door het aanroepen van RunAsync, StopAsync of WaitForShutdownAsync met een uitzondering. De toepassing wordt doorgaans afgesloten met een afsluitcode voor fouten (niet-nul).
- Als een enkele service faalt, wordt de uitzondering die door de service wordt geworpen, opnieuw opgegooid.
- Als meerdere services mislukken, worden de uitzonderingen gecombineerd tot een AggregateException.
Type van brekende verandering
Deze wijziging is een gedragswijziging.
Reden voor wijziging
Als een toepassing stopt vanwege een fout, moet deze niet worden afgesloten met een geslaagde afsluitcode. Het vorige gedrag verbergt de fout, waardoor het moeilijker is om de uitzondering te detecteren en diagnosticeren die dit heeft veroorzaakt.
Aanbevolen actie
De aanbevolen actie is niets te doen: een mislukte toepassing moet worden afgesloten met een afsluitcode voor fouten. Dit is het nieuwe gedrag.
Als u het vorige gedrag wilt behouden en moet afsluiten met een geslaagde afsluitcode, omsluit u de await van RunAsync of StopAsync in een try-catch blok:
try
{
await host.RunAsync();
}
catch (Exception ex)
{
// Log or inspect the exception if needed.
}
Betreffende API's
- Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync
- Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run
- Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.StopAsync
- Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.WaitForShutdownAsync
- Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.WaitForShutdown
- Microsoft.Extensions.Hosting.IHost.StopAsync (standaard implementatie)