gpt4 book ai didi

c# - System.Threading.Task 什么时候有用?

转载 作者:IT王子 更新时间:2023-10-29 04:48:55 26 4
gpt4 key购买 nike

我已经广泛使用了大部分 Threading 库。我非常熟悉创建新线程、创建 BackgroundWorkers 和使用内置的 .NET ThreadPool(它们都非常酷)。

但是,我从来没有找到使用 Task 的理由类(class)。我可能见过一两个人们使用它们的例子,但是这些例子不是很清楚,而且它们没有给出一个高层次的概述,说明为什么应该使用任务而不是新线程。

问题 1:从高层次上看,与 .NET 中的其他并行性方法相比,什么时候使用任务有用?

问题 2:有人有简单和/或中等难度的示例来演示如何使用任务吗?

最佳答案

使用 Task 有两个主要优点:

  1. Task 可以表示将来可用的任何结果(一般概念不特定于 .Net,它称为 future ),而不仅仅是计算。这对于 async-await 尤其重要,它使用 Task 进行异步操作。由于获取结果的操作可能会失败,因此 Task 也可以表示失败。
  2. Task 有很多操作它们的方法。您可以同步等待直到它完成 (Wait()),等待它的结果 (Result),在 Task 完成时设置一些操作(ContinueWith()) 以及一些适用于多个 Task 的方法(WaitAll()WaitAny()ContinueWhenAll())。使用其他并行处理方法可以实现所有这些,但您必须手动完成。

使用 Task 还有一些较小的优势:

  1. 您可以使用自定义 TaskScheduler 来决定 Task 何时何地运行。这可能很有用,例如,如果你想 run a Task on the UI thread , limit the degree of parallelismhave a Task-level readers–writer lock .
  2. Task通过CancellationToken 支持协作取消.
  3. 代表计算的
  4. Task 有一些性能改进。例如,他们使用工作窃取队列来提高处理效率,并且还支持内联(在同步等待它的线程上执行尚未启动的 Task)。

关于c# - System.Threading.Task 什么时候有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11596753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com