gpt4 book ai didi

c# - BackgroundService 任务未在 .NET Core 通用主机中的单独线程上运行

转载 作者:行者123 更新时间:2023-11-30 21:31:49 58 4
gpt4 key购买 nike

新的 .NET Core“通用主机”似乎是实现运行多个并发任务的控制台应用程序的不错选择。我认为我可以使用 IHostedService(或 BackgroundService)将它们定义为服务,而不是显式地创建和运行任务。但是,通用主机正在同一个线程上执行我所有所谓的“后台任务”。这是预期的行为吗?

public static async Task Main(string[] args)
{
var host = new HostBuilder()
.ConfigureHostConfiguration(...)
.ConfigureAppConfiguration(...)
.ConfigureServices((hostContext, services) =>
{
services.AddLogging();
services.AddHostedService<Service1>();
services.AddHostedService<Service2>();
services.AddHostedService<Service3>();
})
.ConfigureLogging(...)
.UseConsoleLifetime()
.Build();

await host.RunAsync();
}

通用主机在同一线程上运行我的所有三个“后台”服务。 Thread.CurrentThread.ManagedThreadId 在主线程和每个“后台”服务的 StartAsync 或 ExecuteAsync 方法中被发现等于 1。有没有办法确保服务在单独的线程上运行?

最佳答案

IHostedService 接口(interface)只为您提供启动和停止工作的 Hook 。您有责任根据您的服务功能自行实现线程、后台事件等。您可以设置一个异步执行事件的计时器或设置一个正在运行的后台线程等。

通用主机并不意味着您的“服务”的线程或执行模型。

关于c# - BackgroundService 任务未在 .NET Core 通用主机中的单独线程上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52826483/

58 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com