Как можно запустить несколько 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;
}
}