【发布时间】:2015-12-07 07:53:32
【问题描述】:
我正在阅读考试参考书 70-483:Wouter de Kort 的 C# 编程。
作者没有明确提到 C# 的版本,但我猜是 5.0,因为他大量使用了 async/await 关键字。
本书中的例子只使用了Thread.Sleep(),没有使用Task.Delay()
Parallel.For(0, 10, i =>
{
Thread.Sleep(1000);
});
,
Task.Run(() =>
{
bag.Add(42);
Thread.Sleep(1000);
bag.Add(21);
});
等等等等……
从this 等其他阅读/SO 问题中,我认为
await Task.Delay(1000)
在并行上下文中通常应该比
Thread.Sleep(1000)
因为 Task.Delay 使其线程不受阻碍,从而允许其他任务在其上执行。
我刚刚按了 Ctrl-F 键,但没有找到 Task.Delay 的一次出现!
我对来自互联网的社区意见和 Microsoft 官方书籍感到困惑。
如果 Task.Delay 是一种很好的做法,为什么这本书没有以任何方式解决它?
还是我错过了什么?
【问题讨论】:
-
或许最好问问书的作者?
-
为了使用 Task.Delay(1000) 你必须使用 'await' 它强制你的方法是异步的。有时这不是一个好方法。但是您始终可以不受限制地使用 Thread.Sleep()。
-
Task.Delay只是Thread.Sleep的等待版本,原因正是您所说的,因此线程资源被释放以安排其他工作。简而言之,书籍代码往往比较容易遵循,但可能会在奇怪的地方丢球。在线查看本书的勘误表(如果有),并查看其他来源,例如文章或博客文章,以获得进一步的意见和解释。没有一本书是良好编程实践的唯一真理来源,有时一本书会遗漏或出错。
标签: c# async-await task-parallel-library