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