BackgroundService からのハンドルされない例外

以前のバージョンでは、BackgroundService によってハンドルされない例外がスローされると、例外が失われ、サービスが応答しなくなりました。 .NET 6 では、例外をログし、ホストを停止することで、この動作を修正しています。

変更の説明

以前のバージョンの .NET では、BackgroundService.ExecuteAsync(CancellationToken) オーバーライドから例外がスローされると、例外は失われ、サービスは応答しなくなります。 ホストは引き続き実行され、メッセージはログに記録されません。

.NET 6 以降では、 オーバーライドから例外がスローされると、例外が現在の に記録されます。 既定では、ハンドルされない例外が発生するとホストは停止します。

導入されたバージョン

.NET 6

変更理由

この新しい動作は、他のアプリ モデルでハンドルされない例外が発生した場合の動作と一致しています。 また、 でエラーが発生しても、何も記録されないことは開発者の混乱を招きます。 ハンドルされない例外は無視すべきではないので、既定の動作として一番よいのはホストを停止することです。 これによって、注意が必要な問題があることが示唆されます。

でハンドルされない例外が発生した場合に、以前の動作のままホストを停止しない場合は、`HostOptions.BackgroundServiceExceptionBehavior``BackgroundServiceExceptionBehavior.Ignore` に設定します。

Host.CreateBuilder(args)
    .ConfigureServices(services =>
    {
        services.Configure<HostOptions>(hostOptions =>
        {
            hostOptions.BackgroundServiceExceptionBehavior = BackgroundServiceExceptionBehavior.Ignore;
        });
    });

影響を受ける API