我有一个需要并行处理的很多项目的IEnumerable。这些项目不是CPU密集型的。 理想情况下,这些项目应该同时执行100个或更多的线程。C# - 并行Foreach缓慢创建线程
我试着用Parallel.ForEach()来做到这一点。这有效,但问题是新线程产生得太慢。在Parallel.Foreach()达到100个线程之前需要很长时间。我知道有一个MaxDegreeOfParallelism属性,但这是最大值,而不是最小值。
有没有办法在100个线程上立即执行foreach? ThreadPool.SetMinThreads是我们宁愿避免的,因为它对整个过程有影响。
是否有自定义分区程序可能的解决方案?
嘛'Parallel.ForEach'使用线程池等剧,但它的规则,所以'SetMinThreads'似乎是唯一的选择(如果您想使用'Parallel.ForEach'明确)。 – Evk
您能否提供一个示例来演示您的_Processing_ intails。它是IO绑定/ CPU绑定,它是多步骤的过程..等等? – JSteward
但是,如果您的任务不是CPU密集型的(因此 - 主要是IO密集型) - 您可以使用async \ await与SemaphoreSlim结合来限制并发性,例如http://stackoverflow.com/a/10810730/5311735(但不要像那样使用Task.Run(等待...)。 – Evk