2017-03-09 6 views
3

私は10種類の並列スレッドで実行する1つの方法を持っていますが、すべて互いに独立しています。私は処理するアイテムが100アイテムあり、一度に10を処理したいのですが、一度に10をどのように実行するのですか?私はParallel.ForEachを使用しているサンプルコードを作成しましたが、何を設定する必要があるので、一度に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 
    } 

は、私は一度に10項目を実行したいと10のいずれかがlstMaterialCompositionから次の項目を開始する必要がありますので、完成したParallel.ForEachにおけるのでlstMaterialCompositionは、DBから100個のレコードを取得したとします。

Parallel.ForEachでも可能ですか他にもありますか?

答えて

6

ParallelOptions.MaxDegreeOfParallelismプロパティを使用すると、タスクの数を制限できます。

MaxDegreeOfParallelism MaxDegreeOfParallelismプロパティは、このParallelOptionsインスタンスを渡すParallelメソッド呼び出しによって実行される並行操作の数に影響します。正のプロパティ値は、同時操作の数を設定値に制限します。 -1の場合、同時に実行される操作の数に制限はありません。実行中のタスクのいずれかが完了した場合

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

おかげアディルは、新しいParallelOptions {MaxDegreeOfParallelism = 10}を設定する芳香族、次のタスクを取るのだろうか? –

+0

はい@Neeraj Kumar Gupta。 – Adil

関連する問題