我有一种方法,它使用后台工作人员轮询 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);
}
查看我的 CPU 百分比时,yield()
我spinwait()
的应用程序在我的 PC 上运行高达 50%。我的 CPU 百分比保持在Sleep(1)
6%。有人告诉我应该选择Thread.Yield()
,但是 CPU % 的峰值困扰着我。这样的事情的最佳做法是什么?