C# 基于任务的处理,对.NET 4.5和c的并发任务数有限制#

C# 基于任务的处理,对.NET 4.5和c的并发任务数有限制#,c#,multithreading,task-parallel-library,.net-4.5,C#,Multithreading,Task Parallel Library,.net 4.5,接下来,有没有人可以针对.NET4.5(以及更大规模的WPF用户界面)发布以下任务的基本解决方案 基本上,我正在寻找在.NET4.5和c#上实现的任何torrent应用程序的功能模拟 任务: 我有IEnumerable,包含1000个IProcessable实例,IProcessable有Process(int参数)方法,执行时间为1到10秒。我想循环遍历集合并处理IProcessable的每个实例,将并发处理的实例数限制为N(1..10),最大并发实例数应该可以轻松调整。理想情况下,我希望每个

接下来,有没有人可以针对.NET4.5(以及更大规模的WPF用户界面)发布以下任务的基本解决方案

基本上,我正在寻找在.NET4.5和c#上实现的任何torrent应用程序的功能模拟

任务:

我有
IEnumerable
,包含1000个
IProcessable
实例,
IProcessable
Process(int参数)
方法,执行时间为1到10秒。我想循环遍历集合并处理
IProcessable
的每个实例,将并发处理的实例数限制为N(1..10),最大并发实例数应该可以轻松调整。理想情况下,我希望每个
I可处理的
都能报告流程完成的进度,这里是流程的原型(可能需要将其转换为某种形式,而不是空的形式,以实现进度报告):


如果您只想限制一次处理的实例数,那么这似乎是一个很好的解决方案。当您使用它时,您可以指定执行此操作的方法。

如果您只想限制一次处理的实例数,那么这似乎是一个很好的解决方案。当您使用它时,您可以指定,哪一个可以做到这一点。

@Tudor第二个,但是我看不出有多大区别,因为只有在处理IProcessable时才会创建新线程,我是否缺少什么?@Tudor第二个,但是我看不出有多大区别,因为只有在处理IProcessable时才会创建新线程,我遗漏了什么吗?“最大并发实例数应该很容易调整”。如果您的意思是在处理过程中它应该是可调整的,那么您不应该使用
Parallel.ForEach()
,而应该使用多线程生产者/消费者队列。“最大并发实例数应该可以轻松调整”。如果您的意思是在处理过程中它应该是可调整的,那么您不应该使用
Parallel.ForEach()
,而应该使用多线程生产者/消费者队列。
void Process(int e)
{
   int progress = 0;
   ...Sleep for 100ms;
   int progress = 30;
   ...Sleep for 100ms;
   int progress = 50;
   ...
}