gpt4 book ai didi

c# - Parallel.ForEach 行为

转载 作者:行者123 更新时间:2023-11-30 13:55:39 25 4
gpt4 key购买 nike

我知道对于 Parallel.ForEach 循环,每个线程可能在任何给定时间执行循环的不同部分。但是,每个线程是不是依次执行循环中的代码呢?我刚刚在读"Parallel Loops" on MSDN它指出:

Sometimes, two steps take place in the opposite order than they would if the loop were sequential. The only guarantee is that all of the loop's iterations will have run by the time the loop finishes.

假设我有以下内容:

IEnumerable<MyObject> myEnumerable = ...
Parallel.ForEach(myEnumerable, obj =>
{
A();
B();
C();
});

我知道线程 1 可能正在执行 A() 而线程 2 可能正在执行 C(),但是每个线程都会在循环中按顺序执行代码。线程 1 执行 A() B() C() 还是可能执行 B()C(), A()?

最佳答案

迭代 是整个循环体的单次执行,与您的代码中表达的完全一样。

迭代可以(而且很可能会)以任何顺序开始、运行和完成(这将取决于实现细节和运行时数据,例如哪些工作人员可用以及何时可用)。但是,每个单独的迭代都将被执行,就好像循环是顺序的(就像普通的 foreach)而不是并行的。

换句话说,它不可能对任何一项执行 B() 然后 C() 然后 A() 。它将始终为每个项目执行 A(),然后是 B(),然后是 C()。您根本无法知道哪些项目 将按什么顺序处理。

关于c# - Parallel.ForEach 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32612550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com