2017-06-01 48 views
0

我正在爲數百個服務器啓動遠程進程,並且一次運行約3個線程。所以首先,我想排隊3個線程,並讓它們各自運行processData()函數,然後forloop中的其餘項必須等到隊列打開才能運行該函數,以便我可以繼續並行處理3個線程在任何時候直到完成。做這件事的最好方法是什麼?在循環中一次處理X個線程的最佳方法?

foreach (ServerData serv in servers) { 
    processData(...) 
} 
+1

Parallel.ForEach(servers, new ParallelOptions { MaxDegreeOfParallelism = 3 }, (serv) => { //processData function... });

更多關於可在這裏Parallel.ForEach信息閱讀[this](https://msdn.microsoft.com/en-us/library/dd460720(v = vs.110).aspx) – FortyTwo

回答

2

您可以嘗試Parallel.ForEach功能。它還包含一些選項來自定義將同時運行多少個線程。如果您沒有指定任何內容,則會根據可用內存/ CPU處理能力創建線程。

例子:

Parallel.ForEach(servers, (serv) => { //processData function... });

如果你想在同一時間只能運行3個線程:https://msdn.microsoft.com/en-us/library/dd460720(v=vs.110).aspx

+0

很酷。任何想法如何比較一個線程池(如果在所有相關的?) – ryan

+0

它內部使用線程池 – VMAtm

相關問題