【发布时间】:2012-07-22 00:00:49
【问题描述】:
我已经广泛使用了大部分 Threading 库。我对创建新线程、创建 BackgroundWorker 和使用内置的 .NET ThreadPool 非常熟悉(这些都非常酷)。
但是,我从来没有找到使用Task 类的理由。我可能看到过一两个使用它们的例子,但这些例子不是很清楚,也没有给出一个高层次的概述,说明为什么应该使用一个任务而不是一个新线程。
问题 1:从高层次来看,在 .NET 中使用任务与使用其他并行处理方法之一相比何时有用?
问题 2:有没有人有一个简单和/或中等难度的例子来演示如何使用任务?
【问题讨论】:
-
任务往往更易于使用,尤其是当您将它们视为尚未完成的工作的承诺时。
-
任务(和 TPL)允许进一步抽象 [a]sync 操作。已经存在/曾经是 IAsyncResult 接口(BeginXYZ/EndXYZ 经常使用它,Task 也使用它),但使用起来有点尴尬。 Task 类提供了一种常见的“反转”技术; Task 可以执行“普通”代码,而不是创建新的 IAsyncResult 类型。
-
我认为您的问题 2 不适合 SO。
-
@William 我不确定,但我认为“给我看一个 X 的例子”实际上不是一个问题,所以它不属于像 SO 这样的问答。
-
@svick - 我知道这个问题不是很具体,但这是我知道可能需要学习的情况之一,但我不知道如何问正确提问。我认为你下面的答案很完美!
标签: c# multithreading parallel-processing task-parallel-library task