Multithreading 哪些参数有助于决定何时使用哪个:C中的线程、线程池或任务#
我想知道在哪些场景和情况下应该使用Multithreading 哪些参数有助于决定何时使用哪个:C中的线程、线程池或任务#,multithreading,c#-4.0,.net-4.0,task-parallel-library,threadpool,Multithreading,C# 4.0,.net 4.0,Task Parallel Library,Threadpool,我想知道在哪些场景和情况下应该使用线程类、线程池类或任务并行库以及它们之间的区别 我试图通过谷歌搜索找到这个,但什么也找不到 我这样问是因为在某些情况下,使用Thread类并自己管理线程会更好,而在其他情况下ThreadPool会更好,但对此不太确定 e、 g.我们希望在应用程序启动时从数据库加载大量订单数据:什么样的线程管理技术(Thread | ThreadPool | TPL)将提供最佳的好处,同时还将提供更高的代码可维护性和其他好处 以上只是一个例子,但我想具体了解线程场景中考虑的所有
线程
类、线程池
类或任务并行库
以及它们之间的区别
我试图通过谷歌搜索找到这个,但什么也找不到
我这样问是因为在某些情况下,使用Thread
类并自己管理线程会更好,而在其他情况下ThreadPool
会更好,但对此不太确定
e、 g.我们希望在应用程序启动时从数据库加载大量订单数据:什么样的线程管理技术(Thread | ThreadPool | TPL)将提供最佳的好处,同时还将提供更高的代码可维护性和其他好处
<强>以上只是一个例子,但我想具体了解线程场景中考虑的所有参数,这些参数可以帮助确定<代码>线程或<代码>线程池或<代码> TPL
或Task
Task
LongRunning
提示,默认情况下,该提示会创建一个专用线程)。此外,它还为您的代码提供了未来的证明,随着C#5的发展,您将获得能够在适当的时候与新的异步语言支持集成的优势
直接使用Thread
或ThreadPool
类的问题在于它们不包含组合多个工作项的方法,至少不直接包含ThreadPool.QueueUserWorkItem
将利用线程池,但这在Task.Factory.StartNew
中也会发生(默认情况下)。但是,生成的任务
允许与其他任务(tasks.WaitAll、continuations等)轻松组合,从而允许多个工作项更具表现力的组合
TPL还提供了在框架中直接使用和支持的好处。在大多数情况下,您应该使用
任务,Reed在回答中解释道
但是,当您想要控制正在创建的线程时,会出现一些罕见的情况。这包括您要设置的时间:
- 线程优先级
- 公寓状态(某些COM对象需要此状态)
- 处理器相关性(这应该非常罕见)
在这些情况下,您应该直接使用Thread
(当然不能修改线程池线程的优先级)。尽管您可以将其与TPL相结合,例如创建一个任务调度程序
,在线程
上运行其任务
,并将安装状态设置为STA。好的,这是一个很好的建议,但如果您还可以解释为什么任务或任务更好?