【发布时间】:2018-10-16 23:01:56
【问题描述】:
新的 .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。有没有办法确保服务在不同的线程上运行?
【问题讨论】:
标签: c# asp.net-core .net-core