前往
大廳
主題

C#利用SpinUntil跑迴圈,補充timeout參數測試

Yang | 2023-05-28 12:42:19 | 巴幣 0 | 人氣 310

補充上次寫的,C#利用SpinUntil跑迴圈及簡易效能測試

參考:

//測試程式碼:
const int sleepMSecs = 1000 * 12;
int cnt3 = 0;

bool spinResult = SpinWait.SpinUntil(() =>
{
    Thread.Sleep(sleepMSecs);

    Console.WriteLine($"{nameof(cnt3)}={cnt3}");

    return ++cnt3 < 0;
}, 1000 * 10);

public static bool SpinUntil (Func<bool> condition, int millisecondsTimeout);

初步測試,sleepMSecs <= 1000,SpinUntil會像直覺上理解的,跑10秒後timeout

接著測試sleepMSecs介於1100~12000,condition都是跑10次後觸發timeout,遠超過10秒

使用NET7,跨平台在Win10/CentOS7測試結果類似

把SpinUntil的英文介紹和原始碼找來看,和Thread.Sleep有很大不同,細節沒看懂,

不像thread和cpu的pipeline,一般會以工廠的生產線做介紹和聯想,SpinUntil看起來有不同的運作機制

SpinUntil中文被譯為切換、空轉、旋转、自旋...,有看沒有懂

結論,SpinUntil的timeout參數,和直覺上理解的不同

需要有精準的時間離開condition時,應該在condition內自行設計,不使用SpinUntil的timeout參數

public static bool SpinUntil (Func<bool> condition);
送禮物贊助創作者 !
0
留言

創作回應

更多創作