我正在使用下面的代码,但只运行一个循环,但它必须进入无限循环
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”中添加了值,所以它应该进入无限循环,但它不是那样的行为
答案 0 :(得分:1)
由于你没有真正告诉你的用例,我只能猜测。但对我来说,这听起来像是面临生产者 - 消费者问题。
Checkout IProducerConsumerCollection和实现BlockingCollection。使用GetConsumingEnumerable,你可以得到一些你可以在foreach中使用的东西,同时它可以从另一个地方填充。
HTH
答案 1 :(得分:0)
根本不是foreach如何运作。它枚举了一个集合,这意味着它逐个遍历集合中的所有项目。从这个角度来看,使用并行foreach而不是序列foreach并没有任何区别,可枚举集合的大小是在迭代开始时确定的。
如果您想要无限循环,请尝试
而(真) { aa.Add(&#34; asasasa&#34); }
结构。