Я создаю приложение, которое создаст несколько объектов HttpWebRequest, и загружаю мой html методом httpRequest.BeginGetResponse
. Я возвращаю IAsyncResult
и храню его локально, чтобы я мог отменить запрос в любое время, но я не уверен, правильно ли я это делаю.
Вот что я делаю для отмены асинхронного веб-запроса:
var res = (RequestState)asyncResult.AsyncState;
res.Request.Abort();
Где запрос имеет тип HttpWebRequest
.
Что я замечаю, так это то, что даже после того, как я вызываю эти строки кода, в моем приложении все еще открыты все потоки Async. И если я устанавливаю точку останова в делегате, вызываемом в httpRequest.BeginGetResponse(GetResponseCallback, state)
(например, метод GetResponseCallback
), отладчик разрывается внутри метода через несколько секунд, вызывая выброс WebException при запуске этого метода.
Просто для полноты мой GetResponseCallback выглядит следующим образом:
using (var httpWebResponse = (HttpWebResponse)request.EndGetResponse(result))
using (Stream dataStream = httpWebResponse.GetResponseStream())
using (var reader = new StreamReader(dataStream))
{
string ret = reader.ReadToEnd();
state.OnComplete(ret, new EventArgs());
}
и я получаю исключение WebException в строке using (Stream dataStream = httpWebResponse.GetResponseStream())
. Внутреннее исключение говорит что-то вроде «сервер активно отказал в соединении» или что-то в этом роде.
Любая помощь будет отличной!