Skip to main content

Create an ASP.NET Core backgroundservice that runs at regular intervals using PeriodicTimer

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.

More information

PeriodicTimer Class (System.Threading) | Microsoft Learn