У меня есть метод, который использует фоновый рабочий процесс для опроса 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()
, однако меня беспокоят всплески в процентах ЦП. Какова наилучшая практика для чего-то подобного?