Почему итерации с более низким индексом не выполняются? - PullRequest
1 голос
/ 06 марта 2020

В коде нет ошибок компиляции, но нет итерации во время выполнения. Я Stopped loop iteration на 200, поэтому l oop не будет идти дальше, но l oop не выполнит итерацию ниже < 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); }

Любая помощь для решения этой проблемы будет принята с благодарностью. Спасибо

1 Ответ

0 голосов
/ 06 марта 2020

Вы должны вызвать loopState.Break() вместо loopState.Stop().

Из документации ParallelLoopState.Break метод:

Прерывание указывает, что итераций нет после текущей итерации должен быть запущен Это эффективно отменяет любые дополнительные итерации l oop. Тем не менее, это не останавливает любые итерации, которые уже начали выполнение. Например, если Break вызывается из сотой итерации параллельной l oop с итерацией от 0 до 1000, все итерации, меньшие 100, все равно должны выполняться, но итерации от 101 до 1000, которые еще не начались, не выполняются .

...