来自 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
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈