什么参数有助于决定何时使用哪个:C#中的线程或ThreadPool或任务

VS1*_*VS1 2 multithreading .net-4.0 threadpool task-parallel-library c#-4.0

我想知道所有情景和情况应该使用一个Thread类,一个ThreadPool类或Task Parallel Library它们之间有什么区别.

我试图通过谷歌搜索找到这个,但找不到任何东西.

我问这个问题,因为在某些情况下,使用Thread类和管理线程本身更好,而其他情况ThreadPool会更好但不太确定.

例如,我们希望在应用程序启动时从数据库加载大量的订单数据:什么线程管理技术(Thread | ThreadPool | TPL)将提供最佳的好处,并且还将提供更多的代码可维护性和其他好处.

上面只是一个例子,但我想知道具体是什么样的所有参数在线程的情况考虑是可以帮助确定的使用之间ThreadThreadPoolORTPL

Ree*_*sey 6

一般情况下,我建议始终使用TaskTask<T>代码为.NET 4或更高版本.

这提供了一个统一的API,它为您提供了默认使用ThreadPool的好处(但允许您使用自定义调度程序或指定LongRunning提示,默认情况下创建一个专用线程).此外,它将来会证明您的代码,随着C#5的推进,您将获得在适当时能够与新的异步语言支持集成的优势.

直接使用ThreadThreadPool类的问题在于它们不包含用于组合多个工作项的方法,至少不是直接的. ThreadPool.QueueUserWorkItem将利用线程池,但这也发生(默认情况下)与Task.Factory.StartNew.然而,结果Task允许容易地与其他任务(Tasks.WaitAll,延续等)组合,这允许多个工作项的更具表现力的组合.

TPL还提供了直接使用和支持框架中的取消模型的好处.