2016-10-28 6 views
0

以下のコードスニペットに対してParallel.ForEach(...)を実行したいのですが、2つの関数呼び出しがあります。どちらも同じブロック内で起こるはずですfuntionは最初の関数によって返された値を消費しています。私は誰にこれを達成するか分からない。基本的に私は以下をParallel.ForEach(...)に変換したいと思います。前もって感謝します。Parallel.Foreach複数の関数を呼び出して消費するため

 List<Employee> employeeList = GetEmployees(); 

     foreach (var emp in employeeList) 
      { 
       var empDetails = GetEmpDetails(emp.EmployeeId); 

       ProcessEmployeeDetails(empDetails); 
      } 

私はすでに以下を試してみました、それが動作していない:

  Parallel.ForEach(employeeList, emp => 
      { 
       var empDetails = GetEmpDetails(emp.EmployeeId); 

       ProcessEmployeeDetails(empDetails); 

      }); 
+0

どういう意味ですか?何が起こるのですか? 'GetEmpDetails'と' ProcessEmployeeDetails'について詳しく説明できますか? –

+0

この方法の1つで、いくつかの共通の状態を変更していますか?そして問題はParallel.ForEachではなく、パラレルで実行するという理論上の可能性があります。 –

+0

GetEmpDetails(emp.EmployeeId)とProcessEmployeeDetails(empDetails)は共通の状態を変更していないので、Detials rがGetEmpDetails(emp.EmployeeId)から返されると、ProcessEmployeeDetails(empDetails)はその詳細を取得し、新しいテーブル。 – saklo

答えて

0

をあなたが舞台裏EF接続を使用しているようだと、それは、このために設計されていないようだと、複数のデータを実行同じコマンドに対して検索が実行されます。あなたはそれについての詳細を読むことができますhere。 MARSを有効にするためのソリューションもあります。

Parallel.ForEachには問題はありませんが、いくつかの基本的な問題はありませんが、それは並行して実行できません。

P.S.もっと明確にするには、ループの本体内の2つの関数が同じスレッド上で実行されます。

+0

はい... Linq to Entityを使用しています。ご協力いただきありがとうございます。 – saklo

+0

問題ありません。問題が解決しない場合は、MARSを有効にしたり、他の解決方法を検索してみてください。パラレルスレッドで何をするかに注意して、保護されていないリソースを編集したり、マルチスレッドをサポートするように設計されていない他のライブラリを使用したりしないように注意する必要があります。 –

+0

はこれを行います。もう一度お手伝いいただきありがとうございます。とても有難い。 – saklo

関連する問題