如何动态增加parallel.foreach循环

时间:2013-09-11 06:51:12

标签: c# multithreading parallel.foreach

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

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”中添加了值,所以它应该进入无限循环,但它不是那样的行为

2 个答案:

答案 0 :(得分:1)

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

Checkout IProducerConsumerCollection和实现BlockingCollection。使用GetConsumingEnumerable,你可以得到一些你可以在foreach中使用的东西,同时它可以从另一个地方填充。

HTH

答案 1 :(得分:0)

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

如果您想要无限循环,请尝试

  
    

而(真)         {              aa.Add(&#34; asasasa&#34);         }

  

结构。