ASP.NET Core › Background Tasks & Hosted Services
What is the difference between IHostedService and the BackgroundService convenience base class?
IntermediateAnswer
IHostedService is the low-level interface with just StartAsync and StopAsync methods, giving you full control for services that don't have an inherent continuous loop (like something that just registers/deregisters once at startup and shutdown). BackgroundService is a convenience base class implementing IHostedService specifically for the common 'continuous work loop' pattern, handling the StartAsync/StopAsync plumbing so you only write ExecuteAsync.
// Direct IHostedService: no continuous loop needed
public class MetricsRegistrationService : IHostedService {
public Task StartAsync(CancellationToken ct) {
MetricsRegistry.Register("my-service");
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken ct) {
MetricsRegistry.Unregister("my-service");
return Task.CompletedTask;
}
}Real-world example A service that simply registers the application with a service discovery system at startup and deregisters at shutdown implements IHostedService directly, since it has no ongoing loop -- unlike a queue processor, which extends BackgroundService instead.