在.NET 6中引入了新Timer:System.Threading.PeriodicTimer,它和之前的Timer相比,最大的區別就是新的PeriodicTimer事件處理可以方便地使用異步,消除使用callback機制減少使用複雜度。
1
2
3
4
5
using PeriodicTimer timer = new(TimeSpan.FromSeconds(2));
while (await timer.WaitForNextTickAsync())
{
Console.WriteLine(DateTime.UtcNow);
}
與Timer的區別
消除了回呼,不再需要綁定事件
不會發生重入,只允許有一個消費者,不允許同一個
PeriodicTimer在不同的地方同時WaitForNextTickAsync,不需要自己做排他鎖來實現不能重入非同步化,之前的幾個
timer的callback都是同步的,使用新的timer我們可以更好的使用非同步方法,避免寫Sync over Async之類的程式碼
.Net6 新特性 - PeriodicTimer - 异步化的定时器
[C#] .Net6新定时器PeriodicTimer