Thread.Sleep или Thread.Yield

У меня есть метод, который использует фоновый рабочий процесс для опроса DLL на предмет статуса, который выглядит примерно так:

var timeout = DateTime.Now.AddSeconds(3);
while (System.Status != Status.Complete  // our status is not complete
       && DateTime.Now < timeout         // have not timed out
       && !_Worker.CancellationPending)  // backgroundworker has not been canceled
{
    //Thread.Yield();
    //Thread.SpinWait(1);
    //Thread.Sleep(1);
}

Если посмотреть на мой процент ЦП, yield()и spinwait()приводят к тому, что мое приложение загружается до 50% на моем ПК. С Sleep(1)мой процент ЦП остается на уровне 6%. Мне сказали, что я должен выбрать Thread.Yield(), однако меня беспокоят всплески в процентах ЦП. Какова наилучшая практика для чего-то подобного?

26
задан ruffin 18 August 2017 в 15:34
поделиться