如何在foreach循环中执行“requestData”的并行处理?

问题描述:

我迭代一个foreach loop在我解析一个字符串是这样的:如何在foreach循环中执行“requestData”的并行处理?

我想解雇我的字符串“imageUrl”在HttpWebRequest并行请求。意思是一次4请求和响应类型的系统(用于我的核心实用程序)。

我该怎么办呢?

代码:

foreach (var item in requestData) 
{ 

    try 
    { 
     string imageUrl = Convert.ToString(item.ImageUrl); 
     imageUrl = imageUrl.Replace('\r', ' '); 
     //It is Use for saving at our project location. 
     string saveLocation = 
       @AppDomain.CurrentDomain.BaseDirectory + @"Image\someone.jpg"; 

     byte[] imageBytes; 
     try 
     { 
      HttpWebRequest imageRequest = 
           (HttpWebRequest)WebRequest.Create(imageUrl); 
      WebResponse imageResponse = imageRequest.GetResponse(); 
      Stream responseStream = imageResponse.GetResponseStream(); 
      using (BinaryReader br = new BinaryReader(responseStream)) 
      { 
       imageBytes = br.ReadBytes(500000); 
       br.Close(); 
      } 
      responseStream.Close(); 
      imageResponse.Close(); 

      FileStream fs = null; 
      BinaryWriter bw = null; 
      fs = new FileStream(saveLocation, FileMode.Create); 
      bw = new BinaryWriter(fs); 
      bw.Write(imageBytes); 

      fs.Close(); 
      bw.Close(); 
      id = Convert.ToString(item.Id); 
      // string ImageUrl= Convert.ToString(dr["ImageUrl"]); 
      ImageProcess(id); 
     } 
     catch (Exception) 
     { 
      log.Info("Image Url Wrong!!!"); 
      drCurrentRow = dt.NewRow(); 
      drCurrentRow["Id"] = Convert.ToString(item.Id); ; 
      drCurrentRow["Label"] = "Error"; 
      drCurrentRow["Score"] = 0; 
      drCurrentRow["Flag"] = "1"; 
      dt.Rows.Add(drCurrentRow); 
      //drCurrentRow = dt.NewRow(); 
      dt.AcceptChanges(); 
     } 

     finally 
     { 
      fs.Close(); 
      bw.Close(); 
     } 
    } 
    catch (Exception e) 
    { 
     log.Info(e); 
    }    

} 
BulkInsert(); 
} 

我想解雇我的字符串imageUrlHttpWebRequest并行请求。

我该怎么办呢?

+0

可能的复制[发送多的WebRequest中的Parallel.For(http://stackoverflow.com/questions/7477261/send-multiple-webrequest-在平行的换) –

Parallel.ForEach(requestData, item => 
    { 
     //your code 
}); 

你可以使用的Parallel.ForEach()by Using async and await

Parallel.ForEarch(requestData, item => { 

    //web request 

});