Эффективно ли это для
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()
}
Я обеспокоен тем, что все уступки SpinWait не могут быть хорошим шаблоном использования, если мы говорим о тайм-аутах в течение 1 секунды? Действительно ли это предположение?
Какой подход вы предпочитаете и почему? Есть ли еще лучший подход?
Обновить. Становится более конкретным:
Есть ли способ сделать BlockingCollection Pulse спальным потоком, когда он достигнет ограниченной емкости? Я предпочитаю избегать оживленного ожидания, поскольку Марк Гравел предлагает.