1

我正在使用下面的代码,但只运行一个循环,但它必须进入无限循环

List<string> aa = new List<string>();
aa.Add("aa");                        

Parallel.ForEach(aa, new ParallelOptions { MaxDegreeOfParallelism = 5 }, bb =>
{                       
    Console.WriteLine("value:" + bb);                                  
    aa.Add("asasasa");               

    Thread.Sleep(10);                           
});

这里只有一个 parallel.foreach 循环运行,但我在列表“aa”中添加了值,所以它应该进入无限循环,但它的行为不是那样

4

2 回答 2

1

由于您并没有真正告诉您的用例,我只能猜测。但对我来说,听起来你正面临着生产者-消费者的问题。

检查 IProducerConsumerCollection 和 BlockingCollection 的实现。使用 GetConsumingEnumerable,您将获得可以在 foreach 中使用的东西,而它是从另一个地方填充的。

hth

于 2013-09-11T07:07:36.407 回答
0

这根本不是 foreach 的工作方式。它枚举一个集合,这意味着它会一个一个地遍历集合中的所有项目。从这个角度来看,使用并行 foreach 而不是串行 foreach 没有任何区别,可枚举集合的大小在迭代开始时确定。

如果你想有一个无限循环,试试

while(true) { aa.Add("asasasa"); }

而是结构。

于 2013-09-11T09:11:19.857 回答