如果 Task.Delay 优于 Thread.Sleep,为什么本书中的示例使用 Thread.Sleep?

If Task.Delay is to be prefered over Thread.Sleep, why examples in this book use Thread.Sleep?

我正在阅读考试参考 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);
});

等等等...

从其他 reading/SO 问题,如 this,我认为

await Task.Delay(1000)

在并行上下文中通常应该比

做得更好
Thread.Sleep(1000)

因为 Task.Delay 使其线程不受阻碍,从而允许其他任务在其上执行。
我刚刚按 Ctrl-F 键打开了这本​​书,但没有找到 Task.Delay 出现的地方! 我对来自 Internet 的社区意见和 Microsoft 官方书籍感到困惑。
如果 Task.Delay 是一个好习惯,为什么本书不以任何方式解决它?
还是我漏掉了什么?

考试 70-483 是 Visual Studio 2012 年的考试,当时 C# 还没有 async/await。

此外,Thread.Sleep() 只是表示工作正在进行。

other question处理真实世界的代码;你书里的都是代码示例,完全不一样

代码示例:

如果您 想要 阻塞当前线程,则

Thread.Sleep 是合适的 - 即,您正在模拟一些同步/CPU 绑定工作。

如果您 不想 阻塞当前线程,则

Task.Delay 是合适的 - 即,您正在模拟一些异步/I/O-bound 工作。

对于您发布的特定示例(Parallel.ForTask.Run 中的代码),我认为 Thread.Sleep 是最合适的。 Parallel.ForTask.Run 专门用于不同线程上的 运行 CPU 绑定代码,因此 Thread.Sleep 的同步 "placeholder" 是正确的。

请注意,在实际代码中,Thread.SleepTask.Delay 的任何 "placeholder" 用法都将替换为实际代码。

在实际代码中,Task.Delay 对于延迟重试之类的事情仍然很有用。 Thread.Sleep 不应出现在实际代码中。