using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Configuration;
namespace BackgroundServiceExample
public static async Task Main(string[] args)
var host = Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
services.AddSingleton<TimePrintingService>();
var cancellationToken = CancellationToken.None;
public class TimePrintingService : BackgroundService
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
while (!stoppingToken.IsCancellationRequested)
await Task.Delay(1000, stoppingToken);
public override async Task StartAsync(CancellationToken cancellationToken)
await base.StartAsync(cancellationToken);
public override async Task StopAsync(CancellationToken cancellationToken)
Console.WriteLine($"Application is shutting down: {DateTime.Now}, Thread ID: {Thread.CurrentThread.ManagedThreadId}");
await base.StopAsync(cancellationToken);
private void PrintCurrentTime()
Console.WriteLine($"Current time: {DateTime.Now}, Thread ID: {Thread.CurrentThread.ManagedThreadId}");