using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
public static async Task Main(string[] args)
var host = new HostBuilder()
.ConfigureHostConfiguration(configHost =>
configHost.SetBasePath(Directory.GetCurrentDirectory());
configHost.AddJsonFile("https://raw.githubusercontent.com/aspnet/AspNetCore.Docs/master/aspnetcore/fundamentals/host/generic-host/samples/2.x/GenericHostSample/hostsettings.json", optional: true);
configHost.AddEnvironmentVariables(prefix: "PREFIX_");
configHost.AddCommandLine(args);
.ConfigureAppConfiguration((hostContext, configApp) =>
configApp.AddJsonFile("https://raw.githubusercontent.com/aspnet/AspNetCore.Docs/master/aspnetcore/fundamentals/host/generic-host/samples/2.x/GenericHostSample/appsettings.json", optional: true);
configApp.AddEnvironmentVariables(prefix: "PREFIX_");
configApp.AddCommandLine(args);
.ConfigureServices((hostContext, services) =>
services.AddHostedService<TimedHostedService>();
.ConfigureLogging((hostContext, configLogging) =>
configLogging.AddConsole();
configLogging.AddDebug();
internal class TimedHostedService : IHostedService, IDisposable
private readonly ILogger _logger;
public TimedHostedService(ILogger<TimedHostedService> logger)
public Task StartAsync(CancellationToken cancellationToken)
_logger.LogInformation("Timed Background Service is starting.");
_timer = new Timer(DoWork, null, TimeSpan.Zero,
TimeSpan.FromSeconds(5));
return Task.CompletedTask;
private void DoWork(object state)
_logger.LogInformation("Timed Background Service is working.");
public Task StopAsync(CancellationToken cancellationToken)
_logger.LogInformation("Timed Background Service is stopping.");
_timer?.Change(Timeout.Infinite, 0);
return Task.CompletedTask;