Parallel.For/Foreach 循环以同步顺序获取列表外的元素

Parallel.For/Foreach loop take elements outside of a list in synchronized order

我有一个并行的 for 循环和一个如下所示的列表:

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

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

 });

我想在这里做什么:

所以基本上在“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);

这样无限期地重复迭代。

有人可以帮我解决这个问题吗?

这将对所有元素执行相同的次数。
只要你只从列表中读取它就应该是线程安全的。

但是'sequential in time'与并行不兼容。

 Parallel.For(0, 5000, ex=>
 {
    int myIndex = ex % itemsList.Count;
    string myItem = itemsList[myIndex];
    // use myItem
 });