Parallel.ForEach:其中一个线程是主线程吗?

时间:2015-09-10 05:40:24

标签: .net parallel.foreach

我从主线程中调用了Parallel.ForEach循环。 我的问题如下: “Parallel.ForEach期间创建的其中一个主题是主线程吗?”

2 个答案:

答案 0 :(得分:2)

当你使用像Parallel类这样的并行结构时,并不意味着创建了新的线程。 .NET提供了一个称为线程池的东西,其中有许多已经创建的线程可用于任何.NET应用程序,因此无论是否使用Parallel等类,您的应用都不会创建任何新线程。

根据msdn Parallel.ForEach

  

执行foreach(For Each中的For Each)操作   迭代可以并行运行。

所以调用的所有Action也可能在主线程上运行,如果你调用一些微不足道的东西,编译器可能会使用偶数线程池线程进行优化。

答案 1 :(得分:1)

Parallel.ForEach使用一些“分支”线程通过ThreadPool并行运行您的操作,并阻止当前线程(您的“主线程”)。很可能一个“分支”在当前线程上运行,但它不可预测。