C# 是否存在不应使用任务的场景?

C# 是否存在不应使用任务的场景?,c#,.net,multithreading,task-parallel-library,C#,.net,Multithreading,Task Parallel Library,我正在阅读关于任务是4.0异步编程的首选方式的文章。我只是想知道是否有任何用例不应该优先使用任务而不是普通的c#threads?这里有详细介绍: 最大的区别是TaskFactory使用线程池,因此如果有很多任务,它们可能不会立即启动。他们必须等待空闲线程运行。在大多数情况下,这是可以接受的 只要硬件允许,只要调用.Start(),线程就会立即运行 假设线程池是正常的,那么任务提供了许多好处,包括取消、继续、成功、错误、异常聚合和等待等等,这些都是我想不起的。因为任务使用底层线程池(除非标记为长

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

这里有详细介绍:

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

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


假设线程池是正常的,那么任务提供了许多好处,包括取消、继续、成功、错误、异常聚合和等待等等,这些都是我想不起的。

因为
任务
使用底层
线程池
(除非标记为长时间运行),在不建议使用
线程池时使用它们是个坏主意,例如:

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

一旦调用.Start(),线程将立即就绪。它们将在内核可用时运行,这通常是“即时”的好观点,我应该澄清线程是硬件有限的,而任务是软件有限的。谢谢运行。这篇博客文章似乎也对各种方法进行了很好的比较。线程关联性是一个很好的观点,尽管它很少出现。我建议在长时间运行的操作中仍然使用任务,只要您将它们标记为长时间运行。@Dan Bryant:当然,因为在这种情况下,会提示调度程序生成额外的线程。