我正在爲數百個服務器啓動遠程進程,並且一次運行約3個線程。所以首先,我想排隊3個線程,並讓它們各自運行processData()
函數,然後forloop中的其餘項必須等到隊列打開才能運行該函數,以便我可以繼續並行處理3個線程在任何時候直到完成。做這件事的最好方法是什麼?在循環中一次處理X個線程的最佳方法?
foreach (ServerData serv in servers) {
processData(...)
}
我正在爲數百個服務器啓動遠程進程,並且一次運行約3個線程。所以首先,我想排隊3個線程,並讓它們各自運行processData()
函數,然後forloop中的其餘項必須等到隊列打開才能運行該函數,以便我可以繼續並行處理3個線程在任何時候直到完成。做這件事的最好方法是什麼?在循環中一次處理X個線程的最佳方法?
foreach (ServerData serv in servers) {
processData(...)
}
您可以嘗試Parallel.ForEach功能。它還包含一些選項來自定義將同時運行多少個線程。如果您沒有指定任何內容,則會根據可用內存/ CPU處理能力創建線程。
例子:
Parallel.ForEach(servers, (serv) => { //processData function... });
如果你想在同一時間只能運行3個線程:https://msdn.microsoft.com/en-us/library/dd460720(v=vs.110).aspx
:
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