來自 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;
        });
    });

受影響的 API