2014-10-11 4 views

Antwort

16

Wenn Sie eine SendAsync führen die HttpClient.Timeout auf dem CancellationTokenSource platziert wird. Dies bedeutet, dass dieses Zeitlimit für die gesamte asynchrone Operation gilt.

Auf der anderen Seite wird WebRequestHandler.ReadWriteTimeout auf die HttpWebRequest kopiert, wo sie auf Antrag Strom eingestellt ist sowohl ReadTimeout und WriteTimeout. Das ist also mehr ein Timeout auf der Stream-Ebene, was letztlich eine Socket-Level-Timeout ist.

Wenn Sie beide festlegen, wird der Zeitüberschreitungswert mehr als HttpClient.Timeout betragen. Wenn ein Lese- oder Schreibvorgang länger als WebRequestHandler.ReadWriteTimeout dauert, wird ebenfalls ein Timeout ausgelöst. Obwohl ich nicht sicher bin, ob es einen Unterschied in den ausgelösten Zeitüberschreitungsausnahmen gibt.

+0

Da es sich um Streams handelt, würde 'ReadWriteTimeout 'affect' Response.Content.ReadAsStringAsync' dann? Im Moment verwende ich 'HttpCompletionOption.ResponseContentRead' beim Aufruf von' SendAsync', um sicherzustellen, dass der Inhalt vor dem Timeout gelesen wird, weil 'ReadAsStringAsync' kein explizites Timeout oder keine explizite Löschung erlaubt. Ich würde stattdessen 'HttpCompletionOption.ResponseHeadersRead' verwenden, wenn' WebRequestHandler' es mir erlaubt, eine Zeitüberschreitung beim Lesen des Inhalts-Streams zu setzen. – iguanaman

+0

Es ist ein bisschen schwierig, sich Ihren Anwendungsfall aus der Beschreibung vorzustellen, können Sie den relevanten Code durch Bearbeiten der Frage posten? – weston

-1

System.Net.HttpClient kann Timeout Eigenschaft wie oben

var client = new HttpClient(); 
client.Timeout.Add(new TimeSpan(1,0,0)); 
+0

OP fragt, was ist "Unterschied" zwischen den beiden Dingen, nicht, wie zu verwenden. –

+0

Sorry, ich habe deine Frage falsch gelesen ... –

+0

Entschuldigung, ich habe deine Frage falsch gelesen ... Zwei ist fast gleich, aber WebRequestHandler kann andere Parameter setzen, HttpClient.Timeout ist etwas schneller als WebRequestHandler –

1

WebRequestHandler.ReadWriteTimeout gesetzt - Ruft einen Timeout in Millisekunden setzt, wenn eine Anforderung an oder Lesen einer Antwort von einem Server zu schreiben.

HttpClient.Timeout - Ruft den TimeSpan ab oder legt diesen fest, um zu warten, bis die Anforderung abläuft.

Hier WebRequestHandler ist ein Wrapper über HTTPClient WebRequestHandler leitet sich von HttpClientHandler sondern fügt Eigenschaften, die im Allgemeinen nur auf vollständige .NET zur Verfügung stehen. Zum Schluss, es ist mehr auf weniger dasselbe.

Weitere Informationen finden Sie auf diesen Link - http://blogs.msdn.com/b/henrikn/archive/2012/08/07/httpclient-httpclienthandler-and-httpwebrequesthandler.aspx