using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using Microsoft.Extensions.Hosting;
using System.Threading.Tasks;
public static async Task Main(string[] args)
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true)
config["HostedServices"] = "worker1";
var hostBuilder = Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
var workersString = config.GetValue<string>("HostedServices");
var workers = workersString.Split(",");
if(workers.Contains("worker1"))
services.AddHostedService<Worker1>();
if(workers.Contains("worker2"))
services.AddHostedService<Worker2>();
}).ConfigureLogging(b => {
b.SetMinimumLevel(LogLevel.Information);
using(var host = hostBuilder.Build())
public class Worker1 : IHostedService
public Worker1(ILogger<Worker1> logger)
public Task StartAsync (CancellationToken cancellationToken)
_logger.LogInformation("Started: worker1");
return Task.CompletedTask;
public Task StopAsync (CancellationToken cancellationToken)
_logger.LogInformation("Stopped: worker1");
return Task.CompletedTask;
public class Worker2 : IHostedService
public Worker2(ILogger<Worker2> logger)
public Task StartAsync (CancellationToken cancellationToken)
_logger.LogInformation("Started: worker2");
return Task.CompletedTask;
public Task StopAsync (CancellationToken cancellationToken)
_logger.LogInformation("Stopped: worker2");
return Task.CompletedTask;