Как запустить несколько параллельных BackgroundService в .net core 3.0? - PullRequest
3 голосов
/ 07 октября 2019

Как можно запустить несколько IHostedServices параллельно?

Я использую WorkerService в .Net Core 3.0 и хочу, чтобы обе службы работали параллельно. В настоящее время второй сервис ожидает завершения первого. Обе службы должны работать бесконечно.

    public static IHostBuilder CreateHostBuilder(string[] args)
    {
        return Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<ServiceA>();
                services.AddHostedService<ServiceB>();
            });
    }

Служба выглядит следующим образом:

public class ServiceA : BackgroundService
{
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        do
        {
            Console.WriteLine("Sample");
            await Task.Delay(5000, stoppingToken);
        } while (!stoppingToken.IsCancellationRequested);
    }
}

// edit: очень неохотно, я бы использовал такой метод Task.Run(() => method());. Но, конечно, этот способ всегда работает:

public class ServiceA : BackgroundService
{
    public override Task StartAsync(CancellationToken cancellationToken)
    {
        Task.Factory.StartNew(() => ExecuteAsync(cancellationToken), cancellationToken);
        return Task.CompletedTask;
    }
}
...