using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
class MyService : BackgroundService {
public MyService(string name) => _name = name;
protected override Task ExecuteAsync(CancellationToken stoppingToken) {
Console.WriteLine("Execute {0}", _name);
return Task.CompletedTask;
var host1 = Host.CreateDefaultBuilder()
.ConfigureServices((context, services) => {
services.AddSingleton<IHostedService>(new MyService("host1-1"));
services.AddSingleton<IHostedService>(new MyService("host1-2"));
var host2 = Host.CreateDefaultBuilder()
.ConfigureServices((context, services) => {
services.AddHostedService(f => new MyService("host2-1"));
services.AddHostedService(f => new MyService("host2-2"));
Task.WhenAll(host1.RunAsync(), host2.RunAsync());