2016-11-21 17 views
0

ForEachParallel.ForEachに変換しようとしています。C#Parallel.ForEach、not working

ForEachは、完璧に動作し、期待される結果が得られます。どこでParallel.ForEachを使用しようとしたときに、List変数にエラーが発生し、その変数が使用できないと言います。

私は間違っていますか?説明するコードにコメントを追加しました。

public class CalssTest 
    { 

     List<AssetDetails> assets; 
     AssetDetails asset; 


     private void loadData() 
     { 
      //Loading Assetdetails here 
      //Skipped here to keep the code short. 
     } 

     private void cmdValidate_Click(object sender, RoutedEventArgs e) 
     { 
      OrderManager om = new OrderManager(); 

      using (ATXFunctions atx = new ATXFunctions()) 
      { 
       //*****THIS WORKS *********//. 
       foreach (AssetDetails ad in assets) 
       { 
        ad.OrderEntry.OrderType= "A"; 
        ad.OrderEntry.Portfolio = "John"; 
        ad.OrderEntry.Quantity = 1000;      
        ad.Compliance.Result = om.RunCompliance(atx.AtxEngine, ad.StockEntry, ad.OrderEntry);    
       } 

        //*****THIS ERRORS OUT *********//. 
       // Error :: 
       //The name 'assets' does not exist in the current context 

       Parallel.ForEach (assets (ad) => 
       { 
        ad.OrderEntry.OrderType = "A"; 
        ad.OrderEntry.Customer = "John"; 
        ad.OrderEntry.Quantity = 1000; 
        ad.Compliance.Result = om.ValidateOrder(ad.StockEntry, ad.OrderEntry); 
       }); 


      } 
     } 
    } 
+2

? – Jon

+0

はい。私はばかです。これを無駄にする時間。 :)応答ありがとう。 – teddy2

答えて

4

あなた構文が間違って使用することである:assets` `の後にコンマがありません

Parallel.ForEach(assets , (ad) => 
    { 
        ad.OrderEntry.OrderType = "A"; 
        ad.OrderEntry.Customer = "John"; 
        ad.OrderEntry.Quantity = 1000; 
        ad.Compliance.Result = om.ValidateOrder(ad.StockEntry, ad.OrderEntry); 
       }); 
+0

天才。ありがとう。これでほとんど泣いていた。 :) – teddy2