我从主线程中调用了Parallel.ForEach
循环。
我的问题如下:
“Parallel.ForEach
期间创建的其中一个主题是主线程吗?”
答案 0 :(得分:2)
当你使用像Parallel
类这样的并行结构时,并不意味着创建了新的线程。 .NET提供了一个称为线程池的东西,其中有许多已经创建的线程可用于任何.NET应用程序,因此无论是否使用Parallel
等类,您的应用都不会创建任何新线程。
根据msdn Parallel.ForEach
执行foreach(For Each中的For Each)操作 迭代可以并行运行。
所以调用的所有Action
也可能在主线程上运行,如果你调用一些微不足道的东西,编译器可能会使用偶数线程池线程进行优化。
答案 1 :(得分:1)
Parallel.ForEach
使用一些“分支”线程通过ThreadPool
并行运行您的操作,并阻止当前线程(您的“主线程”)。很可能一个“分支”在当前线程上运行,但它不可预测。