[英]Spinwait for a number of spins in Portable Class Library
我想通過Xamarin替換面向ASPNET Core,.NET 4.5.2和Android + iOS的PCL中的SpinWait方法,但找不到直接的等效方法。 目前我正在考慮更換
System.Threading.Thread.SpinWait(10);
同
SpinWait spinWait = new SpinWait();
SpinWait.SpinUntil(() => spinWait.Count >= 10);
但是我不知道我是不是開了一罐蠕蟲。 或者如果可能
for(int i=0; i<10; i++) SpinOnce();
更好。 我已經避免了這一點,因為SpinOnce()在每次旋轉后都會產生,因此效率可能會降低。
語境:
我目前正在將這個高精度計時器移植到PCL(ASPNET Core,.NET 4.5.2和Android + iOS,通過Xamarin),並遇到SpinWait方法刪除問題。 http://www.codeproject.com/Articles/98346/Microsecond-and-Millisecond-NET-Timer
在.NET Framework中,有一個方法SpinWait()接受一個int,它指示要等待多少個旋轉( https://msdn.microsoft.com/en-us/library/system.threading.thread.spinwait( v = vs.110).aspx )但是當針對這個框架組合但是包含SpinWait結構時,System.Threading.Thread命名空間不可用( https://msdn.microsoft.com/en-us/library/ system.threading.spinwait(v = vs.110).aspx )它允許我訪問SpinOnce()和一個接受布爾返回函數的SpinUntil()方法。
原來我對避免屈服的直覺並不完全正確,並且發現在SpinUntil( http://referencesource.microsoft.com/#mscorlib/system/threading/SpinWait.cs )的源代碼中,實際上有一次對SpinOnce的重復調用()。
沒有錯誤檢查邏輯,它看起來像這樣:
//Error Checking Logic
SpinWait spinner = new SpinWait();
while (!condition())
{
//Timeout checks
spinner.SpinOnce();
//Timeout and Yielding checks
}
}
//Return Logic
因此,我將此視為可接受的實現示例,並將使用(除非更好的解決方案本身)類似於下面的內容來重新創建所需的行為。
SpinWait spinner = new SpinWait();
while (spinner.Count<10)
{
spinner.SpinOnce();
//Timeout and Yielding checks
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.