Wenn ich den folgenden Code versuchen:Timeout Verhalten 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);
für eine URL, die ich kenne es mehr als 3 Millisekunden dauern wird, zu laden (Ich habe eine Thread.Sleep(110000)
in) es funktioniert gut und wirft eine WebException
wie erwartet.
Problem ist, wenn ich zu Asynchron-Methode wechseln:
var response = request.GetResponseAsync().Result;
oder
var response = await request.GetResponseAsync();
Diese Asynchron-Version völlig ignoriert all Timeout-Wert, einschließlich ReadWriteTimeout
und ServicePoint.MaxIdleTime
ich nicht finden konnte, alles über Timeout in MSDN GetResponseAsync()
Jetzt frage ich mich, ob es ein Fehler in GetResponseAsync()
ist oder ist etwas falsch in der Art, wie ich hier async benutze?
siehe Antwort in http://stackoverflow.com/questions/4238345/asynchron-warte-for-taskt-to-complete-with-timeout – artm
Bedeutet es, dass sie Timeout in allen async APIs absichtlich ignorieren? Ich finde das schwer zu glauben. In diesem speziellen Fall bleibt dem API-Benutzer beispielsweise keine Möglichkeit, unterschiedliche Zeitüberschreitungswerte für verschiedene Stufen wie ReadWriteTimeout/ContinueTimeout festzulegen. –