是否存在不应使用任务的情况?

时间:2012-10-06 15:08:32

标签: c# .net multithreading task-parallel-library

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

2 个答案:

答案 0 :(得分:10)

由于Task使用基础ThreadPool(除非标记为长时间运行),否则每次使用ThreadPool时都不建议使用它们。

  • 阻塞任务队列并阻止执行其他任务的长I / O操作。
  • 执行需要线程标识的操作,例如设置affinity。

答案 1 :(得分:6)

这里详细介绍: Should I notice a difference in using Task vs Threads in .Net 4.0?

这个最大的区别是TaskFactory使用线程池,所以如果你有很多任务,它们可能无法立即启动。他们必须等待一个免费的线程运行。在大多数情况下,这是可以接受的。

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

假设线程池是可以的,那么Tasks提供了许多好处,包括cancel,ContinueWith,OnSuccess,OnError,Exception聚合和WaitAll等等。仅举几例。