我在列表中创建了25个任务。我一次只能开10个线程。
我需要对我的列表进行操作并使用TPL启动前10个任务。然后我想等到任何任务完成。如果任何任务完成,那么我需要继续我的foreach循环并开始我的第11个任务。同样地,我需要在列表中完成所有25个任务。
有什么建议吗?
答案 0 :(得分:0)
这是一个常见的要求。 .NET Framework不包含内置的完美解决方案。执行此操作的一种好方法是为等待SemaphoreSlim
的所有任务创建包装器。信号量将强制执行您所需的并发限制。等待它之后,您可以创建ans启动您想要运行的实际任务。
使用内置工具可以轻松实现此解决方案,但它的缺点是您必须同时启动所有25个任务。因此,您无法使用此技术处理非常大或无限的工作项流。在你的情况下似乎不是问题。
答案 1 :(得分:0)
看看使用大小为10 http://msdn.microsoft.com/en-us/library/dd997371.aspx
的BlockingCollection实现