替代传统 while + Task.Delay / Timer 实现定时循环 心跳保活 间隔轮询

PeriodicTimer

成员 说明
构造函数
PeriodicTimer(TimeSpan period)
创建一个周期为 period 的定时器。
ValueTask<bool> WaitForNextTickAsync(CancellationToken ct = default) 异步等待下一个“滴答”到来;如果在等待期间被取消或定时器已 Dispose ,返回 false,否则为 true
void Dispose()
ValueTask DisposeAsync()
释放底层资源,之后所有等待调用都会立即结束并返回 false
  • .Net 6 以后可用

基本用法

  • 创建定时器
// 每 30 秒一个周期
var timer = new PeriodicTimer(TimeSpan.FromSeconds(30));
  • 循环等待
// 必须在 async 方法中
while (await timer.WaitForNextTickAsync(ct))
{
    // 这里就是每隔 30s 执行一次的逻辑
    DoWork();
}
// 如果 WaitForNextTickAsync 返回 false,说明已取消或 disposed
  • 取消与释放
    传入 CancellationToken,当外部调用 cts.Cancel() 时,会立即结束等待

    循环结束后调用 timer.Dispose() 或 await timer.DisposeAsync()

posted @ 2025-05-24 14:01  C余L小R鱼  阅读(37)  评论(0)    收藏  举报