我需要在我的应用程序中处理并发请求。我使用这段代码:
public class AsyncHttpHelper
{
public static IEnumerable<XDocument> GetPagesAsXDocuments(IEnumerable<string> uris)
{
IEnumerable<IAsyncResult> asyncResults = uris
.Select(uri => (HttpWebRequest)WebRequest.Create(uri))
.Select(webRequest => webRequest.BeginGetResponse(null, webRequest));
WaitHandle[] handles = asyncResults.Select(asyncResult => asyncResult.AsyncWaitHandle).ToArray();
WaitHandle.WaitAll(handles);
var result = asyncResults
.Select(asyncResult =>
{
var httpWebRequest = (HttpWebRequest)asyncResult.AsyncState;
HttpWebResponse response;
try
{
response = (HttpWebResponse)httpWebRequest.EndGetResponse(asyncResult);
}
catch (Exception ex)
{
return null;
}
Stream responseStream = response.GetResponseStream();
if (responseStream == null)
{
return null;
}
using (var streamReader = new StreamReader(responseStream))
{
return XDocument.Load(streamReader);
}
});
return result;
}
}
但它仅适用于请求的 1 个 url。当我尝试获取 2 个或更多 url 时,我的方法挂断了。当我暂停时,调试器显示我正在执行 WaitHandle.WaitAll(handles);
这一行。所以我看到并非所有异步请求都已完成。
那么问题是什么。为什么我不能异步执行多个请求
谢谢安德鲁
最佳答案
这可能是服务点管理器的默认连接限制太低的问题。
(@mfeingold:这是你的意思吗?我认为它默认为 2) 尝试设置属性:
System.Net.ServicePointManager.DefaultConnectionLimit
在创建 HttpWebRequest
之前达到更高的水平。
关于c# - 。网。异步 HttpWebRequest 的最大数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8456851/