我在列表中创建了25个任务。我只能在时间点击10个线程。当前任务完成时继续执行任务
我需要做一个我的列表的foreach,并使用TPL开始前10个任务。然后我想等到任何任务完成。如果任何任务完成,那么我需要继续我的foreach循环并开始我的第11个任务。同样,我需要为列表中的25个任务完成所有工作。
有什么建议吗?
我在列表中创建了25个任务。我只能在时间点击10个线程。当前任务完成时继续执行任务
我需要做一个我的列表的foreach,并使用TPL开始前10个任务。然后我想等到任何任务完成。如果任何任务完成,那么我需要继续我的foreach循环并开始我的第11个任务。同样,我需要为列表中的25个任务完成所有工作。
有什么建议吗?
这是一个常见的要求。 .NET Framework不包含内置的完美解决方案。一个好办法是为所有那些等待SemaphoreSlim
的任务创建一个包装。信号量将强制实现所需的并发限制。等待它后,您可以创建并开始您想要运行的真实任务。
该解决方案可以使用内置工具轻松实现,但它的缺点是必须一次启动全部25个任务。所以你不能用这种技术处理大量或无限的工作流。在你的情况下似乎不是问题。
看看有BlockingCollection实现与10 http://msdn.microsoft.com/en-us/library/dd997371.aspx
我认为这还不够,你应该解释一下你将如何使用'BlockingCollection'。 – svick
大小你能否更详细地解释你在做什么,为什么?为什么不能使用'Parallel.ForEach()'而不是'Task's? – svick
或TPL数据流。我发现数据流通常是一种很好的方法,只要OP有关于节流的问题(通常表示管线/网格场景)。 –