我有一個需要並行處理的很多項目的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