C# 为什么不执行索引较低的迭代?

C# 为什么不执行索引较低的迭代?,c#,asynchronous,parallel.foreach,C#,Asynchronous,Parallel.foreach,代码成功地构建了无编译错误,但在运行时没有任何迭代。I在200停止了循环迭代,因此循环不会继续进行,但循环不会执行低于

代码成功地构建了无编译错误,但在运行时没有任何迭代。I
在200停止了
循环迭代
,因此循环不会继续进行,但循环不会执行低于
<200
的迭代

我不确定我可以使用Stop的任何替代方法来修复此代码吗? 为什么不执行索引较低的迭代

如何解决这个问题。我用谷歌搜索了一些东西,但都是徒劳的。 请考虑以下代码。

 static void Main(string[] args)
    {
        var values= Enumerable.Range(0, 500).ToArray();
        ParallelLoopResult result = Parallel.For(0, values.Count(),
            (int i, ParallelLoopState loopState) => {
                if (i == 200)
                    loopState.Stop();
                WorkOnItem(values[i]);
            });

        Console.WriteLine(result);

    }
static void WorkOnItem(object value) {
        System.Console.WriteLine("Started working on: " + value);
        Thread.Sleep(100);
        System.Console.WriteLine("Finished working on: " + value); }

如能帮助解决此问题,我们将不胜感激。谢谢

您应该调用
loopState.Break()
而不是
loopState.Stop()

从方法的文档中:

Break表示当前迭代之后不应运行任何迭代。它有效地取消了循环的任何附加迭代。但是,它不会停止已经开始执行的任何迭代。例如,如果在从0到1000的并行循环的第100次迭代中调用Break,则所有小于100的迭代仍应运行,但尚未开始的从101到1000的迭代不会执行


您应该调用
loopState.Break()
,而不是
loopState.Stop()

从方法的文档中:

Break表示当前迭代之后不应运行任何迭代。它有效地取消了循环的任何附加迭代。但是,它不会停止已经开始执行的任何迭代。例如,如果在从0到1000的并行循环的第100次迭代中调用Break,则所有小于100的迭代仍应运行,但尚未开始的从101到1000的迭代不会执行


你忘了添加代码:)如果不看你的代码,不知道到底是什么问题,很难说!您正在迭代哪些元素?预期产量是多少?如何迭代?我投票重新打开,因为OP现在添加了缺少的代码。“我可以使用停止的任何替代方法来修复此代码吗?”不要迭代到
values.Count()
,然后停止,迭代到
Math.Min(200,values.Count())
停止。你说的
是什么意思,但是循环不会执行低于<200的迭代。
?当我尝试你的代码时,我可以看到输出,如
开始工作于1…完成工作于1
。你忘了添加代码:)如果没有看到你的代码,很难说问题出在哪里!您正在迭代哪些元素?预期产量是多少?如何迭代?我投票重新打开,因为OP现在添加了缺少的代码。“我可以使用停止的任何替代方法来修复此代码吗?”不要迭代到
values.Count()
,然后停止,迭代到
Math.Min(200,values.Count())
并停止。您所说的
是什么意思,但循环不会执行低于<200的迭代。
?当我尝试您的代码时,我可以看到输出,如
开始处理1…完成处理1