Задачи BackgroundService не выполняются в отдельных потоках в .NET Core Generic Host - PullRequest
0 голосов
/ 16 октября 2018

Новый .NET Core «Generic Host» показался хорошим выбором для реализации консольного приложения, которое выполняет несколько параллельных задач.Вместо того, чтобы явно создавать и запускать задачи, я подумал, что смогу определить их как сервисы, используя IHostedService (или BackgroundService).Тем не менее, Generic Host выполняет все мои так называемые «фоновые задачи» в одном потоке.Это предполагаемое поведение?

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 было найдено равным 1 в главном потоке и в методах StartAsync или ExecuteAsync каждой из "фоновых" служб.Есть ли способ убедиться, что службы работают в отдельных потоках?

1 Ответ

0 голосов
/ 16 октября 2018

Интерфейс IHostedService дает вам только ловушки для запуска и остановки вашей работы.Вы сами несете ответственность за реализацию потоков, фоновых событий и т. д. в зависимости от того, что делает ваш сервис.Вы можете настроить таймер, который выполняет события асинхронно, или настроить запущенный фоновый поток и т. Д.

Общий хост не подразумевает модель потоков или выполнения для ваших «сервисов».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...