替代传统 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()

浙公网安备 33010602011771号