7

假设您有一个包含 1000 个随机整数的数组,并且您需要遍历它以找到数字 68。

在四核 CPU 上使用新的 Parallel.For 将显着提高速度,使每个核只工作 250 个数组项。

问题是:是否可以在满足以下条件时中断 Parallel.For 循环?

if (integerArray[i] == 68)

   break;

谢谢。

4

2 回答 2

9

如果您想在当前执行的迭代完成后停止(但将执行当前迭代之前的迭代 - 即具有较低索引 = i 的迭代)

Parallel.For(0, 100, (i, s) =>
    {
        s.Break();
    });

或者如果您想在当前和之前的交互之后停止(就索引 = i 而言)也应该停止

Parallel.For(0, 100, (i, s) =>
    {
        s.Stop();
    });

但在这两种情况下,如果迭代可能需要一段时间,最好检查是否应该中止工作

s.ShouldExitCurrentIteration

在这里阅读更多Parallel.For Method (Int32, Int32, Action(Int32, ParallelLoopState))

于 2010-08-21T20:06:32.257 回答
2

在我看来,您应该研究 PLINQ(并行 LINQ)来执行并行查询,而不是并行查询。
http://msdn.microsoft.com/en-us/library/dd460688.aspx

于 2010-08-21T20:05:48.317 回答