Чи ефективно це
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 сплячою ниткою, коли вона досягне обмеженої потужності? Я радше уникаю зайнятих очікувань, як пропонує Марк Гравел.