最近我看到了几篇建议,认为在生产代码中永远不应该使用
在我的情况下,我正在使用
在这种情况下,
Thread.Sleep
(最近在这个SO问题中也有类似的说法)。其中许多人主张使用Task.Delay
。我找到的大部分解释都是以UI应用程序为例的,因为Task.Delay
的优点很明显(不会阻塞UI)。在我的情况下,我正在使用
Thread.Sleep
来等待轮询WCF服务的特定条件,像这样:DateTime end = DateTime.UtcNow + TimeSpan.FromMinutes(2);
while (DateTime.UtcNow < end)
{
if (ExternalServiceIsReady() == true)
{
return true;
}
Thread.Sleep(1000);
}
在这种情况下,
Task.Delay
的以下潜在优势似乎并不适用:
- 相对于典型定时器分辨率约为15ms而言,睡眠时间相当长,因此使用
Task.Delay
增加的精度微不足道。 - 该进程是单线程(非UI)且必须阻塞直到条件为真,因此在此处使用
await
没有任何优势。 - 不需要取消延迟的能力。
Thread.Sleep
?如果将我的睡眠行替换为Task.Delay(1000).Wait()
,有什么优点(如果有)?
ExternalServiceIsReady
是做什么的?也许可以完全避免使用 Sleep/Delay。 - EZI