【问题标题】:Task based processing with a limit for concurrent task number with .NET 4.5 and c#基于任务的处理,使用 .NET 4.5 和 c# 限制并发任务数
【发布时间】:2012-09-11 09:25:31
【问题描述】:

this 之后,任何人都可以为以下任务发布准系统解决方案,目标是 .NET 4.5(和更大规模的 WPF UI)吗?

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

任务:

我有IEnumerable<IProcessable>,包含1000 个IProcessable 实例,IProcessableProcess(int argument) 方法,执行需要1 到10 秒。我想遍历集合并处理IProcessable的每个实例,将并发处理的实例数限制为N(1..10),最大并发实例数应该很容易调整。理想情况下,我希望每个 IProcessable 报告流程完成的进度,这是流程的原型(它可能需要转换为某种东西而不是 void 以启用进度报告):

void Process(int e)
{
   int progress = 0;
   ...Sleep for 100ms;
   int progress = 30;
   ...Sleep for 100ms;
   int progress = 50;
   ...
}

【问题讨论】:

  • @Tudor 第二个,但是我看不出有什么不同,因为只有在处理 IProcessable 时才会创建新线程,我错过了什么吗?

标签: c# multithreading task-parallel-library .net-4.5


【解决方案1】:

如果您只想限制一次处理的实例数,那么Parallel.ForEach() 似乎是一个不错的解决方案。当你使用它时,你可以指定MaxDegreeOfParallelism,它会这样做。

【讨论】:

  • “最大并发实例数应该很容易调整”。如果您的意思是它应该在处理期间进行调整,则不应使用Parallel.ForEach(),而应使用多线程生产者/消费者队列。
猜你喜欢
  • 2013-12-19
  • 1970-01-01
  • 2019-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 2015-07-18
相关资源
最近更新 更多