新的.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();
}
通用主机在同一线程上运行我所有的“后台”服务。在“主”线程及每个“后台”服务的StartAsync或ExecuteAsync方法内,发现Thread.CurrentThread.ManagedThreadId
等于1。有没有办法确保服务在单独的线程上运行?