9

我正在阅读任务是使用 4.0 进行异步编程的首选方式。我只是想知道是否有任何用例不应该优先使用任务而不是普通的 c# 线程?

4

2 回答 2

10

由于Tasks 使用底层ThreadPool(除非标记为长期运行),因此在不建议使用 a 时使用它们是一个坏主意,ThreadPool例如

  • 长 I/O 操作会阻塞任务队列并阻止执行其他任务。
  • 执行需要线程标识的操作,例如设置亲和力。
于 2012-10-06T15:17:23.457 回答
6

这在此处进行了详细介绍: 我是否应该注意到在 .Net 4.0 中使用任务与线程的区别?

最大的不同是 TaskFactory 使用线程池,所以如果你有很多任务,它们可能不会立即启动。他们必须等待空闲线程运行。在大多数情况下,这是可以接受的..

在硬件允许的情况下,一旦调用 .Start(),线程就会立即运行。

假设线程池没问题,任务提供了许多好处,包括取消、ContinueWith、OnSuccess、OnError、异常聚合和 WaitAll 等等。

于 2012-10-06T15:10:29.420 回答