Quando provo il seguente codice:comportamento Timeout in HttpWebRequest.GetResponse() vs GetResponseAsync()
var request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Timeout = 3; // a small value
var response = request.GetResponse();
Console.WriteLine(response.ContentLength);
per un URL che so che sta andando a prendere più di 3 millisecondi per caricare (ho messo un Thread.Sleep(110000)
in Application_BeginRequest
) funziona correttamente e genera un WebException
come previsto.
problema è quando posso passare al metodo asincrono:
var response = request.GetResponseAsync().Result;
o
var response = await request.GetResponseAsync();
Questa versione asincrona ignora completamente qualsiasi valore di timeout, tra cui ReadWriteTimeout
e ServicePoint.MaxIdleTime
non riuscivo a trovare nulla su Timeout in MSDN GetResponseAsync()
ora mi chiedo se si tratta di un bug in GetResponseAsync()
o qualcosa non va nel modo in cui uso async qui?
vedere la risposta in http://stackoverflow.com/questions/4238345/asynchronously-wait-for-taskt-to-completo-withtimetime – artm
Significa che ignorano intenzionalmente Timeout in tutte le API asincrone? Lo trovo difficile da credere. Ad esempio, in questo caso specifico, l'utente API non può in alcun modo impostare valori di timeout diversi per fasi diverse come ReadWriteTimeout/ContinueTimeout –