2014-10-11 10 views

risposta

16

Quando si esegue una SendAsync il HttpClient.Timeout è posto sul CancellationTokenSource. Questo significa che questo timeout è per l'intera operazione asincrona.

D'altra parte, WebRequestHandler.ReadWriteTimeout viene copiato sulla HttpWebRequest in cui è impostato sul flusso di richieste sia ReadTimeout e WriteTimeout. Quindi questo è più un timeout a livello di stream, che è in definitiva un timeout di livello socket.

Se si imposta entrambi, poi se l'operazione richiede più di HttpClient.Timeout in totale che verrà timeout, e se di lettura o scrittura dal flusso richiede più tempo di quanto WebRequestHandler.ReadWriteTimeout sarà anche timeout. Anche se non sono sicuro che ci sia una differenza nelle eccezioni di timeout generate.

+0

Poiché è correlato agli stream, sarebbe 'ReadWriteTimeout 'interessa' Response.Content.ReadAsStringAsync' quindi? Al momento utilizzo 'HttpCompletionOption.ResponseContentRead' quando si chiama' SendAsync' per assicurarsi che il contenuto sia letto prima del timeout, poiché 'ReadAsStringAsync' non consente un timeout o cancellazione espliciti. Mi piacerebbe usare 'HttpCompletionOption.ResponseHeadersRead', invece, se' WebRequestHandler' mi permette di impostare un timeout sulla lettura del flusso di contenuti. – iguanaman

+0

È un po 'difficile visualizzare il caso d'uso dalla descrizione, puoi pubblicare il codice pertinente modificando la domanda? – weston

-1

System.Net.HttpClient può impostare proprietà di timeout come sopra

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

L'OP chiede quale sia la differenza tra le due cose, non come utilizzare. –

+0

Scusa, ho letto male la tua domanda ... –

+0

Scusa, ho letto male la tua domanda ... Due è quasi lo stesso, ma WebRequestHandler può impostare altri parametri, HttpClient.Timeout è leggermente più veloce di WebRequestHandler –

1

WebRequestHandler.ReadWriteTimeout - Ottiene o imposta un timeout in millisecondi quando si scrive una richiesta di lettura o di una risposta da un server.

HttpClient.Timeout - Ottiene o imposta TimeSpan in attesa prima che la richiesta scada.

Qui, WebRequestHandler è un wrapper sopra HTTPClient WebRequestHandler deriva da HttpClientHandler ma aggiunge proprietà che in genere sono disponibili sul pieno .NET solo. Per concludere, è più su meno la stessa cosa.

Per maggiori informazioni si riferiscono questo link - http://blogs.msdn.com/b/henrikn/archive/2012/08/07/httpclient-httpclienthandler-and-httpwebrequesthandler.aspx

Problemi correlati