Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 哪些参数有助于决定何时使用哪个:C中的线程、线程池或任务#_Multithreading_C# 4.0_.net 4.0_Task Parallel Library_Threadpool - Fatal编程技术网

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 >/P>>P>。我建议在代码目标.NET4或更高版本中始终使用

Task
Task

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

直接使用
Thread
ThreadPool
类的问题在于它们不包含组合多个工作项的方法,至少不直接包含
ThreadPool.QueueUserWorkItem
将利用线程池,但这在
Task.Factory.StartNew
中也会发生(默认情况下)。但是,生成的
任务
允许与其他任务(tasks.WaitAll、continuations等)轻松组合,从而允许多个工作项更具表现力的组合


TPL还提供了在框架中直接使用和支持的好处。

在大多数情况下,您应该使用
任务,Reed在回答中解释道

但是,当您想要控制正在创建的线程时,会出现一些罕见的情况。这包括您要设置的时间:

  • 线程优先级
  • 公寓状态(某些COM对象需要此状态)
  • 处理器相关性(这应该非常罕见)

在这些情况下,您应该直接使用
Thread
(当然不能修改线程池线程的优先级)。尽管您可以将其与TPL相结合,例如创建一个
任务调度程序
,在
线程
上运行其
任务
,并将安装状态设置为STA。

好的,这是一个很好的建议,但如果您还可以解释为什么任务或任务更好?