Цикл Parallel.For / Foreach принимает элементы вне списка в синхронизированном порядке - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть параллель для цикла и список, который выглядит следующим образом:

 var itemsList = new List<string> { "1","2","3","4","5","6","7","8","9","10","11" };

 Parallel.For(0, 5000, ex=>
 {

 });

Что я хотел бы сделать здесь:

  • Вынуть элементы из itemsList по одномуодин в точном порядке, как они есть в списке, независимо от того, как параллельная итерация вызывается случайным образом

Таким образом, в основном в первой случайной параллельной операции элемент со значением «1» будет храниться в первой переменной, как показано ниже:

var itemFromList = itemList.elementAt(0).Take(1);

Во второй итерации параллельного цикла foreach / for:

var itemFromList = itemList.elementAt(1).Take(1);

После того, как все 11 элементов из списка были использованы .. Я просто хотел бы повторить этот процессснова и снова.

Снова, если последний элемент, который был сохранен в переменной:

var itemFromList = itemList.elementAt(10).Take(1); // Last item

И затем снова используется первый элемент из списка:

var itemFromList = itemList.elementAt(0).Take(1);

Итерацияповторяется так до бесконечности.

Может ли кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 12 февраля 2019

Это будет выполняться для всех элементов одинаковое количество раз.
И до тех пор, пока вы только читаете из списка, оно должно быть поточно-ориентированным.

Но «последовательный по времени» несовместимс идущей параллелью.

 Parallel.For(0, 5000, ex=>
 {
    int myIndex = ex % itemsList.Count;
    string myItem = itemsList[myIndex];
    // use myItem
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...