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

时间:2019-02-12 08:37:40

标签: c# parallel.foreach

我有一个并行的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);

迭代无限期地重复。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

这将在所有元素上执行相同的时间。
只要您只从列表中读取内容,它就应该是线程安全的。

但是“按时间顺序”与并行运行不兼容。

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