Мне нужно обрабатывать параллельные запросы в моем приложении. Я использую этот код:
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);
этой строки. Итак, я вижу, что не все асинхронные запросы были выполнены.
Так в чем проблема. Почему я не могу сделать несколько запросов async
Спасибо, Андрей