C# 如何动态增加parallel.foreach循环

C# 如何动态增加parallel.foreach循环,c#,multithreading,parallel.foreach,C#,Multithreading,Parallel.foreach,我使用下面的代码,但只运行一个循环,但它必须进入无限循环 List<string> aa = new List<string>(); aa.Add("aa"); Parallel.ForEach(aa, new ParallelOptions { MaxDegreeOfParallelism = 5 }, bb => { Console.WriteLine("va

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

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);                           
});
List aa=新列表();
aa.添加(“aa”);
ForEach(aa,新的ParallelOptions{maxdegreeofpparallelism=5},bb=>
{                       
控制台写入线(“值:+bb”);
aa.添加(“asasasa”);
睡眠(10);
});

这里只有parallel.foreach运行的一个循环,但我在列表“aa”中添加了值,所以它应该转到无限循环,但它的行为不是这样的,因为您并没有真正告诉您的用例,我只能猜测。但对我来说,这听起来像是你们面临着生产者和消费者的问题

签出IProducerConsumerCollection和实现阻止集合。使用GetConsumingEnumerable,您可以在foreach中使用一些东西,而它可以从另一个地方填充


hth

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

签出IProducerConsumerCollection和实现阻止集合。使用GetConsumingEnumerable,您可以在foreach中使用一些东西,而它可以从另一个地方填充


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

如果希望有一个无限循环,请尝试

while(true) { aa.添加(“asasasa”); }


而不是结构。

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

如果希望有一个无限循环,请尝试

while(true) { aa.添加(“asasasa”); }


结构。通常,修改正在枚举的集合是个坏主意。我不明白为什么要修改一个并行的集合。ForEach应该是个好主意。为什么要将并行的ForEach与MaxDegreeOfParallelism=1一起使用?这没有任何意义,因为这意味着循环实际上不会是并行的。即使这是可行的,它也不会是一个无限循环,当aa中的项目太多以至于虚拟地址空间用完时,它将是一个崩溃的循环。通常,修改正在枚举的集合是一个坏主意。我不明白为什么要修改一个并行的集合。ForEach应该是个好主意。为什么要将并行的ForEach与MaxDegreeOfParallelism=1一起使用?这没有任何意义,因为这意味着循环实际上不会是并行的。即使这样,它也不会是无限循环,这将是一个循环,当aa结束时,它会崩溃,因为aa中的项目太多,以至于虚拟地址空间用完。我只希望Parallel.ForEach循环是无限的,因为第一次列表aa现在在循环中只有一个值。我向列表aa添加了一个项目,所以要执行另一个循环。我只希望Parallel.ForEach循环是无限的,因为第一次列表aa中只有一个值时间列表aa现在在循环中只有一个值我在列表aa中又添加了一个项目,所以要执行一个循环我的主要任务是假设MaxDegreeOfParallelism=5,但现在只有2个线程处于活动状态,所以我想向源添加数据(列表aa)我真的不明白你想要什么。我的主要目的是假设MaxDegreeOfParallelism=5,但现在只有2个线程处于活动状态,所以我想向我的源代码(列表aa)添加数据。我真的不明白你想要什么。