2014-10-11 18 views

Odpowiedz

16

Podczas wykonywania SendAsyncHttpClient.Timeout jest umieszczony na CancellationTokenSource. Oznacza to, że ten limit czasu dotyczy całej operacji asynchronicznej.

Z drugiej strony, WebRequestHandler.ReadWriteTimeout jest kopiowany do HttpWebRequest gdzie jest ustawiony na strumień żądanie zarówno ReadTimeout i WriteTimeout. Tak więc jest to więcej czasu na poziomie strumienia, który jest ostatecznie limitem czasu na poziomie gniazda.

Jeśli ustawisz oba, to w sumie operacja będzie trwała dłużej niż HttpClient.Timeout, a jeśli odczyt lub zapis ze strumienia zajmie więcej czasu niż WebRequestHandler.ReadWriteTimeout, upłynie również limit czasu. Chociaż nie jestem pewien, czy istnieje różnica w podnoszonych wyjątkach limitu czasu.

+0

Ponieważ jest związany ze strumieniami, to 'ReadWriteTimeout 'Wpływa więc na' Response.Content.ReadAsStringAsync'? W tej chwili używam 'HttpCompletionOption.ResponseContentRead' podczas wywoływania' SendAsync', aby upewnić się, że zawartość zostanie odczytana przed upływem limitu czasu, ponieważ 'ReadAsStringAsync' nie zezwala na jawny limit czasu lub anulowanie. Chciałbym zamiast tego użyć 'HttpCompletionOption.ResponseHeadersRead', jeśli' WebRequestHandler' pozwala ustawić limit czasu na czytanie strumienia treści. – iguanaman

+0

Ciężko wyobrazić sobie Twój przypadek użycia z opisu, czy możesz opublikować odpowiedni kod, edytując pytanie? – weston

-1

System.Net.HttpClient można ustawić właściwość limitu czasu jak wyżej

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

OP pyta, czym jest "różnica" między tymi dwoma rzeczami, a nie, jak używać. –

+0

Przepraszam, źle odczytałem twoją prośbę ... –

+0

Przepraszam, źle odczytałem twoją prośbę ... Dwa są prawie takie same, ale WebRequestHandler może ustawić inne parametry, HttpClient.Timeout jest nieco szybszy niż WebRequestHandler –

1

WebRequestHandler.ReadWriteTimeout - Pobiera lub ustawia limit czasu w milisekundach pisząc wniosek do czytania lub odpowiedzi z serwera.

HttpClient.Timeout - Pobiera lub ustawia TimeSpan, aby czekać, zanim upłyną limity czasu żądania.

Tutaj WebRequestHandler jest opakowaniem nad HTTPClient WebRequestHandler pochodzi z HttpClientHandler ale dodaje właściwości, które zazwyczaj są dostępne tylko na pełnej .NET. Podsumowując, jest to mniej więcej to samo.

Aby uzyskać więcej informacji patrz link - http://blogs.msdn.com/b/henrikn/archive/2012/08/07/httpclient-httpclienthandler-and-httpwebrequesthandler.aspx