我在列表中創建了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有關於節流的問題(通常表示管線/網格場景)。 –