c# - 任务与线程差异

标签 c# .net multithreading task

<分区>

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

所以,我的问题是:

  • 这些类(class)有什么区别?
  • 什么时候使用 Thread 而不是 Task(反之亦然)?

最佳答案

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

Task不仅仅是“在哪里运行一些代码”的抽象——它实际上只是“对 future 结果的 promise ”。因此,作为一些不同的例子:

  • Task.Delay不需要任何实际的 CPU 时间;这就像设置一个定时器在未来响起
  • WebClient.DownloadStringTaskAsync 返回的任务不会在本地占用太多 CPU 时间;它代表的结果很可能将大部分时间花在网络延迟或远程工作(在网络服务器上)
  • Task.Run() 返回的任务真的说“我要你单独执行这段代码”;该代码执行的确切线程取决于许多因素。

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

一般来说,我建议您尽可能使用更高级别的抽象:在现代 C# 代码中,您应该很少需要显式启动自己的线程。

关于c# - 任务与线程差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13429129/

相关文章:

c# - 处理 ListView 中的 MouseMove、MouseDown、MouseUp 事件以拖动无边框表单

c# - 基于无序参数集的重载方法

c# - 在 C# 中解析 JavaScript 代码

c# - Visual Studio 扩展 : Custom Quick Action

mysql - 使用多线程缓慢的mysql数据库恢复(delphi)

c# - F5 后面带有 Redis 背板的 SignalR - StatusCode : 400, ReasonPhrase: 'Bad Request'

c# - ASP.NET Core 5 - 如何拥有可选的依赖项?

.net - 将 Winform 应用程序转换为控制台应用程序

Java/Android 在运行新方法之前等待线程完成

c - C 中动态分配线程