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

时间:2018-10-16 00:45:41

标签: c# asp.net-core .net-core

新的.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。有没有办法确保服务在单独的线程上运行?

1 个答案:

答案 0 :(得分:3)

IHostedService接口仅为您提供用于启动和停止工作的挂钩。您负责根据服务的工作自行实施线程,后台事件等。您可以设置一个计时器来异步执行事件,也可以设置一个正在运行的后台线程等。

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