multithreading - 哪些参数有助于决定何时使用哪个 : Thread or ThreadPool or Task in C#

标签 multithreading c#-4.0 .net-4.0 task-parallel-library threadpool

我想知道在哪些场景和情况下应该使用 Thread 类、ThreadPool 类或 Task Parallel Library 以及他们之间有什么区别。

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

我之所以这样问,是因为在某些情况下,使用 Thread 类并自己管理线程会更好,而在其他情况下 ThreadPool 会更好但并不完全确定这些。

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

以上只是一个例子,但我想具体了解在线程场景中需要考虑的所有参数可以帮助决定使用 Thread OR ThreadPool OR TPL

最佳答案

一般来说,我建议始终使用 TaskTask<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/

相关文章:

c# - Windows 10 支持的操作系统 GUID 是什么?

.class 的 Java 同步块(synchronized block)

c# - 更新实体,所有更改不保存

c# - 转换派生类型和动态最佳实践

c# - 如何在 RDLC 报告的同一文本框中左对齐和右对齐两个不同的表达式?

c# - Wcf - 异常前重试 3 次?

c# - 如何使用 LINQ 执行不区分大小写的 GUID 比较?

java - 为什么当执行器的线程出现异常时,它并没有耗尽可用线程?

c# - 使用线程池或线程

java - 为什么我的线程不起作用?