超时支持多线程Web请求

时间:2012-09-10 14:02:30

标签: c# multithreading webclient

如果您将其用于简单目的,WebClient就足够了。没有超时你可以继承它并轻松覆盖它的GetWebRequest方法:

protected override WebRequest GetWebRequest(Uri address)
{
    WebRequest request = base.GetWebRequest(address);
    request.Timeout = Timeout;
    return request;
}

如果您使用多线程方式,则必须按代码或app.config设置MaxConnection:Improving performance of multithreaded HttpWebRequests in .NET

您也可以轻松并行化: Best practics for parallelize web crawler in .net 4.0

也许Microsoft为WebClient(HttpWebRequest)的实现问题创建了新的HttpClient类

但它没有Proxy,Gzip的支持。

对于WebClient:

在多线程实现中设置超时仍然无用!

Concurrency Limit on HttpWebRequest

所以问题是:

我需要具有代理的FastWebClient,超时(工作一个),gzip支持。我将使用它与多个代理,所以我定义需要多个FastWebClient。

或帮助者:

FastWebHelper.DownloadString(字符串url,WebProxy代理,int超时)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

不确定。 WebClient.DownloadStringAsync Method 您仍然需要为每个连接/请求创建1个WebClient实例,因为它不是无状态的。