2016-11-21 58 views
0

我试图用Parallel.ForEach转换ForEachC#Parallel.ForEach,不工作

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