Thread是一个较低层的概念:如果您直接启动线程,则 知道 它将是一个单独的线程,而不是在线程池等上执行。
Task但是,它不仅仅是对“在哪里运行某些代码”的抽象-实际上,它只是“对未来结果的承诺”。因此,作为一些不同的示例:
Task.Delay
不需要任何实际的CPU时间;就像将计时器设置为将来关闭- 返回的任务
WebClient.DownloadStringTaskAsync
在本地不会占用太多CPU时间;它代表的结果可能是将其大部分时间花费在网络延迟或远程工作(在Web服务器上)上 Task.Run()
真正返回的任务 是 说“我希望您分别执行此代码”;该代码执行的确切线程取决于许多因素。
请注意,
Task<T>抽象对于C#5中的异步支持至关重要。
通常,我建议您尽可能使用更高级别的抽象:在现代C#代码中,您几乎不需要显式启动自己的线程。


![任务与线程的差异[重复] 任务与线程的差异[重复]](http://www.mshxw.com/aiimages/31/421537.png)
