我想知道在哪些场景和情况下应该使用 Thread
类、ThreadPool
类或 Task Parallel Library
以及他们之间有什么区别。
我试图通过谷歌搜索找到这个,但找不到任何东西。
我之所以这样问,是因为在某些情况下,使用 Thread
类并自己管理线程会更好,而在其他情况下 ThreadPool
会更好但并不完全确定这些。
例如我们希望在应用程序启动时从数据库中加载大量订单数据:哪种线程管理技术(Thread | ThreadPool | TPL)将提供最佳优势,并且还将提供更多的代码可维护性和其他优势。
以上只是一个例子,但我想具体了解在线程场景中需要考虑的所有参数,可以帮助决定使用 Thread
OR ThreadPool
OR TPL
最佳答案
一般来说,我建议始终使用 Task
或 Task<T>
在面向 .NET 4 或更高版本的代码中。
这提供了一个统一的 API,让您可以在默认情况下使用 ThreadPool(但允许您使用自定义调度程序或指定 LongRunning
提示,默认情况下会创建一个专用线程)。此外,它还能为您的代码提供 future 证明,随着 C# 5 的发展,您将获得能够在适当时与新的异步语言支持集成的优势。
使用 Thread
的问题或 ThreadPool
类直接是它们不包含组合多个工作项的方法,至少不是直接的。 ThreadPool.QueueUserWorkItem
将利用线程池,但这也会发生(默认情况下)Task.Factory.StartNew
.然而,结果 Task
允许与其他任务(Tasks.WaitAll
、延续等)轻松组合,从而可以更富有表现力地组合多个工作项。
TPL 还提供了直接使用和支持 cancellation model 的好处。在框架中。
关于multithreading - 哪些参数有助于决定何时使用哪个 : Thread or ThreadPool or Task in C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18342411/