Je crée une application qui créera plusieurs objets HttpWebRequest et téléchargera mon code HTML via la méthode httpRequest.BeginGetResponse
. Je récupère le IAsyncResult
et le stocke localement afin que je puisse annuler la demande à tout moment, mais je ne suis pas sûr si je le fais correctement.Annulation de httpwebrequests asynchrones
Voici ce que je fais pour annuler la demande web async:
var res = (RequestState)asyncResult.AsyncState;
res.Request.Abort();
Où demande est de type HttpWebRequest
. Ce que je remarque est que même après avoir appelé ces lignes de code, tous les threads Async sont ouverts dans mon application. Et si j'ai défini un point d'arrêt dans le délégué appelé httpRequest.BeginGetResponse(GetResponseCallback, state)
(par exemple, la méthode GetResponseCallback
) Le débogueur interrompt la méthode après quelques secondes, entraînant le lancement d'une exception WebException lorsque cette méthode est exécutée.
Juste pour être complet, mon GetResponseCallback ressemble à ceci:
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());
}
et je reçois le WebException sur la ligne using (Stream dataStream = httpWebResponse.GetResponseStream())
. L'exception interne dit quelque chose comme "le serveur a activement refusé la connexion" ou quelque chose comme ça.
Toute aide serait excellente!