我知道使用
Parallel.ForEach
循环时,每个线程可能在任何给定时间执行循环的不同部分。但是,每个线程是否按顺序执行循环中的代码?我刚刚在"MSDN上的并行循环"上阅读到以下内容:
假设我有以下内容:有时候,两个步骤的顺序与循环顺序相反。唯一的保证是在循环完成之前,所有的迭代都已经运行。
IEnumerable<MyObject> myEnumerable = ...
Parallel.ForEach(myEnumerable, obj =>
{
A();
B();
C();
});
我知道线程1可能在执行A()
,而线程2可能在执行C()
,但是每个线程是否会按顺序执行循环中的代码?线程1是否会依次执行A()
B()
C()
,还是可能会执行B()
、C()
、A()
?
A() -> B() -> C()
的顺序执行。 - JonesopolisParallel.ForEach
不会分割body
委托,它仅会分割可枚举对象。 - user4003407