43 lines
1.1 KiB
C#
43 lines
1.1 KiB
C#
namespace TimedBackgroundTasks;
|
|
|
|
public class TimedHostedService : BackgroundService
|
|
{
|
|
private readonly ILogger<TimedHostedService> _logger;
|
|
private int _executionCount;
|
|
|
|
public TimedHostedService(ILogger<TimedHostedService> logger)
|
|
{
|
|
_logger = logger;
|
|
}
|
|
|
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
|
{
|
|
_logger.LogInformation("Timed Hosted Service running.");
|
|
|
|
// When the timer should have no due-time, then do the work once now.
|
|
DoWork();
|
|
|
|
using PeriodicTimer timer = new(TimeSpan.FromSeconds(1));
|
|
|
|
try
|
|
{
|
|
while (await timer.WaitForNextTickAsync(stoppingToken))
|
|
{
|
|
DoWork();
|
|
}
|
|
}
|
|
catch (OperationCanceledException)
|
|
{
|
|
_logger.LogInformation("Timed Hosted Service is stopping.");
|
|
}
|
|
}
|
|
|
|
// Could also be a async method, that can be awaited in ExecuteAsync above
|
|
private void DoWork()
|
|
{
|
|
int count = Interlocked.Increment(ref _executionCount);
|
|
|
|
_logger.LogInformation("Timed Hosted Service is working. Count: {Count}", count);
|
|
}
|
|
}
|