2017-03-09 56 views
3

並行線程我有1點的方法,我想在10個不同的並行線程運行在最大任務,都將是獨立存在於彼此之間沒有相關性,我的問題是,如果我有100個項目來處理,並想在一次處理10那麼如何在運行10做一次。我創建了那裏我使用Parallel.ForEach但一個示例代碼我需要做什麼來設置,所以應該在同時運行10個線程,並假設任何正在運行的任務已經完成了,那麼它應該自動採取新的,所以所有的10個線程應該的一直忙着工作,除非所有項目都沒有完成。如何運行定義使用C#.NET 4.0

private void StartAccuracyCalculator() 
    { 
     List<MaterialComposition> lstMaterialComposition = DataHelper.GetMaterialComposition(); 

     Parallel.ForEach(lstMaterialComposition, composition => 
     { 
      try 
      { 
       CalculateAccuracy(composition); 
      } 
      catch (Exception ex) 
      { 
       //LogException(ex) 
      } 
     }); 

    } 


    private void CalculateAccuracy(MaterialComposition composition) 
    { 
     /// actual process to perform 
    } 

假設lstMaterialComposition得到DB 100個記錄,以便在Parallel.ForEach我想運行在同一時間只有10項和任何10已經完成了所以從lstMaterialComposition下一個項目應該開始。

請建議是否有可能雖然Parallel.ForEach或者是有其他的選擇辦呢?

回答

6

您可以使用ParallelOptions.MaxDegreeOfParallelism屬性限制的任務數。

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

Parallel.ForEach(
    lstMaterialComposition, 
    new ParallelOptions { MaxDegreeOfParallelism = 10 }, 
    composition => { 
      try 
      { 
       CalculateAccuracy(composition); 
      } 
      catch (Exception ex) 
      { 
       //LogException(ex) 
      } 
    } 
); 
+0

感謝阿迪爾,創下新ParallelOptions {MaxDegreeOfParallelism = 10}將芳香採取下一步的任務,如果任何正在運行的任務已經完成? –

+0

是@Neeraj庫馬爾古普塔。 – Adil