如何在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();
}
我想解雇我的字符串imageUrl
在HttpWebRequest
并行请求。
我该怎么办呢?
答
Parallel.ForEach(requestData, item =>
{
//your code
});
答
你可以使用的Parallel.ForEach()或by Using async and await
Parallel.ForEarch(requestData, item => {
//web request
});
可能的复制[发送多的WebRequest中的Parallel.For(http://stackoverflow.com/questions/7477261/send-multiple-webrequest-在平行的换) –