來自 BackgroundService 未處理的例外狀況
舊版中,當 BackgroundService 擲回未處理的例外狀況時,例外狀況會遺失,而服務則似乎不會回應。 .NET 6 修正了此行為,方法是記錄例外狀況並停止主機。
變更描述
在舊版 .NET 中,當 BackgroundService.ExecuteAsync(CancellationToken) 覆寫擲回例外狀況時,例外狀況會遺失,而服務則似乎不會回應。 主機會繼續執行,並且不會記錄任何訊息。
從 .NET 6 開始,每當從 BackgroundService.ExecuteAsync(CancellationToken) 覆寫擲回例外狀況時,例外狀況會記錄到目前的 ILogger。 根據預設,當遇到未處理的例外狀況時,主機會停止。
導入的版本
.NET 6
變更原因
當遇到未處理的例外狀況時,新的行為會和其他應用程式模型的行為保持一致。 而且,當開發人員使用的 BackgroundService 遇到錯誤但沒記錄到任何項目時,他們也會感到很頭痛。 最佳預設行為是停止主機,因為未處理的例外狀況不應受到忽略。 未處理的例外狀況代表需要注意的問題。
建議的動作
如果您想保留先前在 BackgroundService 中允許未處理的例外狀況,以便使主機不會停止的行為,可以將 HostOptions.BackgroundServiceExceptionBehavior 設定為 BackgroundServiceExceptionBehavior.Ignore。
Host.CreateBuilder(args)
.ConfigureServices(services =>
{
services.Configure<HostOptions>(hostOptions =>
{
hostOptions.BackgroundServiceExceptionBehavior = BackgroundServiceExceptionBehavior.Ignore;
});
});