c# - 并行处理一组 url 并返回一个 IEnumerable

标签 c# parallel-processing web-scraping system.reactive

我有一组用于抓取的 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/

相关文章:

c# - 在 asp .net core 中为 MediatR 库的 Send 和 Publish 方法添加通用处理程序

c# - 更新 zip 时出现内存不足异常

c# - 如何在 C# 的泛型方法中访问属性值?

c# - 使用 AppDomains 并行化非线程安全 DLL

Python Scraper无法在mysql数据库中保存度数符号°

c# - 使用 MS Sync Framework 2.0,如何最好地处理相关表?

shell - 是否有类似 xargs 的管道数据而不是使用参数?

C 和 OpenMP : pointer to shared read-only data slows down execution

python - 无法从 Selenium page_source 创建 soup?

javascript - 如何在 Node.js 中使用代理