最佳答案
这样做有效吗
SpinWait.SpinUntil(() => myPredicate(), 10000)
超时10000毫秒
或者
在相同条件下使用 Thread.Sleep
轮询是否更有效
例如,类似于下面 SleepWait
函数的内容:
public bool SleepWait(int timeOut)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
while (!myPredicate() && stopwatch.ElapsedMilliseconds < timeOut)
{
Thread.Sleep(50)
}
return myPredicate()
}
我担心如果我们讨论超时超过1秒的话,SpinWait 的所有收益可能不是一个好的使用模式?这是一个有效的假设吗?
你更喜欢哪种方法? 为什么? 还有其他更好的方法吗?
更新 -变得更具体:
当 BlockingCollection Pulse 达到有限容量时,是否有办法使其成为睡眠线程?我宁愿避免像马克 · 格拉维尔建议的那样忙碌的等待。