以前我们可以用Timer来做定时任务,这是一个定时触发事件来执行回调的定时工具.如果可以考虑使用 PeriodicTimer 来代替它
一 使用示例
// One constructor: public PeriodicTimer(TimeSpan period)
using PeriodicTimer timer = new(TimeSpan.FromSeconds(1));
while (await timer.WaitForNextTickAsync())
{
Console.WriteLine(DateTime.UtcNow);
}
// Output:
// 13 - Oct - 21 19:58:05 PM
// 13 - Oct - 21 19:58:06 PM
// 13 - Oct - 21 19:58:07 PM
// 13 - Oct - 21 19:58:08 PM
// 13 - Oct - 21 19:58:09 PM
// 13 - Oct - 21 19:58:10 PM
// 13 - Oct - 21 19:58:11 PM
// 13 - Oct - 21 19:58:12 PM
// ...
二 与Timer的区别
1 消除了回调,不再需要绑定事件
2 不会发生重入,只允许有一个消费者,不允许同一个 PeriodicTimer 在不同的地方同时 WaitForNextTickAsync ,不需要自己做排他锁来实现不能重入
3 异步化,之前的几个 timer 的 callback 都是同步的,使用新的 timer 我们可以更好的使用异步方法,避免写 Sync over Async 之类的代码