Может ли WebClient () загрузить более одной строки одновременно? - PullRequest
2 голосов
/ 24 апреля 2010

Я имею в виду, могу ли я сделать что-то вроде этого:

  var client = new WebClient(); 

  var result = client.DownloadString(string("http://example.com/add.php");

  var result2 = client.DownloadString(string("http://example.com/notadd.php"));

в паралеле вроде за 100 URL?

1 Ответ

2 голосов
/ 24 апреля 2010

В .NET 4.0 самый простой способ - использовать AsycCache ParallelExtensionsExtras вместе с методом расширения DownloadStringTask. Фактически, пример для этого кода охватывает ваш точный сценарий:

public sealed class HtmlAsyncCache : AsyncCache<Uri, string>
{
    public HtmlAsyncCache() : 
        base(uri => new WebClient().DownloadStringTask(uri)) { }
}

...

HtmlAsyncCache cache = new HtmlAsyncCache();

var page1 = cache.GetValue(new Uri(“http://msdn.microsoft.com/pfxteam”));
var page2 = cache.GetValue(new Uri(“http://msdn.com/concurrency”));
var page3 = cache.GetValue(new Uri(“http://www.microsoft.com”)); 

Task.Factory.ContinueWhenAll(
    new [] { page1, page2, page3 }, completedPages =>
{
    … // use the downloaded pages here
});

Подробнее см. здесь .

...