.net - .Net 6 没有运行两个以上的 HostedServices
问题描述
更新到 .Net 6 后,我的托管服务无法注册两个以上的托管服务:
System.InvalidOperationException
HResult=0x80131509
Message=Server has already started.
Source=Microsoft.AspNetCore.Server.Kestrel.Core
StackTrace:
at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<StartAsync>d__29`1.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Microsoft.AspNetCore.Hosting.GenericWebHostService.<StartAsync>d__34.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.GetResult()
at Microsoft.Extensions.Hosting.Internal.Host.<StartAsync>d__11.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.GetResult()
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.<RunAsync>d__4.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.<RunAsync>d__4.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
at Test.Program.Main(String[] args)
您可以重现它,创建一个新的 Blazor 服务器应用程序,然后添加三个空的后台服务,如下所示:
public class TestService1 : Microsoft.Extensions.Hosting.BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
}
}
当我在启动类中添加两个以上的托管服务时,启动应用程序会崩溃,但上述异常除外。
services.AddHostedService<TestService1>();
有谁知道出了什么问题?我正在运行 .Net 6 Preview 5。
解决方案
在做了更多研究之后,我发现了这个线程:https ://github.com/dotnet/core/blob/main/release-notes/6.0/known-issues.md#net-runtime 您可以使用以下解决方法,直到 Microsoft在下一个 .Net 预览版中修复了这个问题
Host.CreateDefaultBuilder(args)
.UseDefaultServiceProvider(o =>
{
o.ValidateOnBuild = false;
});
推荐阅读
- react-native - 渲染错误:重新渲染太多。React 限制渲染次数以防止无限循环
- python - Python绘制一维数组
- c++ - 如何在cmake中构造source_target?
- openmp - 在 OpenModelica 中调用外部 C 函数对 CPU 时间的影响
- command-line - 如何设置scrapy shell的默认用户代理
- symfony - 教义:如何从带有表连接的查询中返回数据?
- javascript - 反应本机'BottomSheetModalInternalContext'不能为空
- r - 导出M(power query)查询结果到csv
- node.js - 我无法使用来自 github 的 npm 和 yarn 运行 uniswap-interface
- python - 如何在python中计算字典数据的均值和中位数