Today I had to implement an ASP.NET Core backgroundservice that need to execute at certain intervals. Before .NET 6 I would have used Task.Delay
or System.Threading.Timer
, but in .NET 6 we have a better alternative through the PeriodicTimer
.
The PeriodicTimer
uses an asynchronous approach based on the System.Threading.Tasks. It has a method WaitForNextTickAsync
that allows to pause execution until the next time the timer is elapsed.
I first created a backgroundservice:
In the ExecuteAsync
method I can now introduce the PeriodicTimer
and call the WaitForNextTickAsync()
method in a while loop . The loop shall run while no cancellation of the background service is requested in the CancellationToken and wait for the next tick of the timer:
Remark: The PeriodicTimer is intended to be used only by a single consumer at a time: only one call to WaitForNextTickAsync() may be in flight at any given moment. So make sure that your business logic is executed before the interval elapses again.