一尘不染

任务与线程的差异[重复]

c#

我是并行编程的新手。.NET中有两个可用的类:TaskThread

因此,我的问题是:

  • 这些类之间有什么区别?
  • 什么时候更好Thread,何时使用Task

阅读 199

收藏
2020-05-19

共1个答案

一尘不染

Thread是一个较低层的概念:如果您直接启动线程,则 知道 它将是一个单独的线程,而不是在线程池等上执行。

Task但是,它不仅仅是对“在哪里运行某些代码”的抽象-实际上,它只是“对未来结果的承诺”。因此,作为一些不同的示例:

  • Task.Delay不需要任何实际的CPU时间;就像将计时器设置为将来关闭
  • 返回的任务WebClient.DownloadStringTaskAsync在本地不会占用太多CPU时间;它代表的结果可能是将其大部分时间花费在网络延迟或远程工作(在Web服务器上)上
  • Task.Run()真正返回的任务 说“我希望您分别执行此代码”;该代码执行的确切线程取决于许多因素。

请注意,Task<T>抽象对于C#5中的异步支持至关重要。

通常,我建议您尽可能使用更高级别的抽象:在现代C#代码中,您几乎不需要显式启动自己的线程。

2020-05-19