我有一组用于抓取的 url,我想并行下载资源,同时返回一组强类型结果。
有一个 WebClient.DownloadString()
和一个“MyTypedResult Process(string s)
”
如何将其包装起来以获得 string[] urls => IEnumerable<MyTypedResult>
转换?
string[] urls = {"url1","url2","url3"};
List<MyTypedResult> ResultCollection = new List<MyTypedResult>();
foreach (var u in urls)
{
WebClient wc = new WebClient();
var content = wc.DownloadString(u);
MyTypedResult r = Process(content);
ResultCollection.Add(r);
}
我希望网络请求并行运行,但我需要一个列表中的结果集合;
最佳答案
您可以使用 .NET 4.5 中的新玩具 HttpClient
来并行获取结果:
var httpClient = new HttpClient();
var tasks = urls.Select(url => httpClient.GetStringAsync(url)
.ContinueWith(task =>
{
string response = task.Result;
return ConvertToStrongType(response);
}));
Task.WaitAll(tasks.ToArray());
var results = tasks.Select(t => t.Result);
关于c# - 并行处理一组 url 并返回一个 IEnumerable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14747737/