2014-06-24 34 views
1

我有如下的實現:使用Parallel.ForEach()長時間運行的過程

Parallel.ForEach(dtJobs.AsEnumerable(),new ParallelOptions{MaxDegreeofParalellism=5},dataRow=> 

    { 

     some long running process 
}); 

物業MaxDegreeofParalellism = 5只能建立5個線程?

我是對的嗎?如果沒有,請大家指正..

+0

它將創建多達5個線程。請參閱http://msdn.microsoft.com/en-us/library/system.threading.tasks.paralleloptions.maxdegreeofparallelism(v=vs.110).aspx – dotnetom

回答

2

ParallelOptions.MaxDegreeOfParallelism

的MaxDegreeOfParallelism屬性影響由被傳遞這個ParallelOptions例如並行方法調用運行的併發操作的數量。正值屬性值將併發操作數限制爲設定值。如果它是-1,則對同時運行的操作數沒有限制。

默認情況下,For和ForEach將使用底層調度程序提供的多個線程,因此,將MaxDegreeOfParallelism更改爲默認值只會限制使用多少個併發任務。

所以,是的,它會最大程度的發揮在5它不能保證得到5,這依賴於底層調度多少線程提供。

+0

感謝您的澄清 –

+0

我們可以將它用於長時間運行的過程嗎?大約需要10分鐘才能完成 –

+0

'Parallel.ForEach'?您應該考慮到它在幕後使用了「ThreadPool」,並且您並不想讓長時間運行的操作使ThreadPool陷於癱瘓。我建議你看看我以前的問題的答案:http://stackoverflow.com/a/24381060/1870803 –