Ist es effizient zu
SpinWait.SpinUntil(() => myPredicate(), 10000)
für eine Zeitüberschreitung von 10000ms
oder
Ist es effizienter, Thread.SleepPolling für dieselbe Bedingung zu verwenden ? Zum Beispiel etwas in Anlehnung an die folgende SleepWaitFunktion:
public bool SleepWait(int timeOut)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
while (!myPredicate() && stopwatch.ElapsedMilliseconds < timeOut)
{
Thread.Sleep(50)
}
return myPredicate()
}
Ich mache mir Sorgen, dass die gesamte Ausbeute von SpinWait möglicherweise kein gutes Nutzungsmuster darstellt, wenn es sich um Zeitüberschreitungen über 1 Sekunde handelt. Ist das eine gültige Annahme?
Welchen Ansatz bevorzugen Sie und warum? Gibt es einen anderen noch besseren Ansatz?
Update - Spezifischer werden:
Gibt es eine Möglichkeit, BlockingCollection Pulse zu einem schlafenden Thread zu machen, wenn die begrenzte Kapazität erreicht ist? Ich vermeide es lieber, viel zu warten, wie Marc Gravel vorschlägt.