.Net 6中的PeriodicTimer


.net 6中新增了一個異步計時器PeriodicTimer,相對普通Timer的回調, 它的模型更簡單。 

1 var       second = TimeSpan.FromSeconds(3);
2 using var timer  = new PeriodicTimer(second);
3 
4 while (await timer.WaitForNextTickAsync())
5 {
6     Console.WriteLine($"Tick {DateTime.Now}");
7 }

關於WaitForNextTickAsync的處理策略,MSDN有點語焉不詳,我以前面代碼中這個周期為3s的Timer為例,簡單測了下:

1. 執行時間小於Timer周期:

將每個任務執行時間調整到2s,查看輸出

    Tick 2022/1/7 11:30:58
    Tick 2022/1/7 11:31:01
    Tick 2022/1/7 11:31:04

2. 執行周期大於Timer周期:

將每個任務執行時間調整到5s,查看輸出:

    Tick 2022/1/7 11:33:08
    Tick 2022/1/7 11:33:13
    Tick 2022/1/7 11:33:18
    Tick 2022/1/7 11:33:23

通過這兩個例子,可以總結出:

  1. 當任務執行時間小於周期時,下次觸發的時間是上次觸發時間+周期
  2. 當任務執行時間大於周期時,下次立即觸發

這個周期策略可以說時非常實用了,后續就用PeriodicTimer代替循環調用Task.Delay了。

相關文章:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM