以前我们可以用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 之类的代码

标签: Timer, Async, .Net6