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

ima*_*mak 9 .net c# multithreading task-parallel-library

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

Tud*_*dor 10

由于Tasks使用底层ThreadPool(除非标记为长时间运行),因此每当使用a时,使用它们是个坏主意,ThreadPool例如

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

  • 我建议仍然使用任务进行长时间运行,只要将它们标记为LongRunning即可. (4认同)

Dha*_*run 6

这里详细介绍: 我是否应该注意到.Net 4.0中使用Task vs Threads的区别?

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

一旦调用.Start(),硬件允许,线程就会立即运行.

假设线程池是可以的,Tasks提供了很多好处,包括cancel,ContinueWith,OnSuccess,OnError,Exception聚合和WaitAll等等.