web-dev-qa-db-ja.com

HttpClient.TimeoutとWebRequestHandlerタイムアウトプロパティの使用の違いは何ですか?

HttpClientオブジェクトのタイムアウトをHttpClient.Timeoutで直接設定できますが、最近WebRequestHandlerの派生物であるHttpClientHandlerクラスについて読みました。

WebRequestHandlerにはReadWriteTimeoutプロパティがあります。 HttpClient.Timeoutと一緒に使用すると、リクエストの操作にどのように影響しますか?

11
iguanaman

SendAsyncを実行すると、CancellationTokenSourceHttpClient.Timeoutが配置されます。つまり、このタイムアウトは非同期操作全体に対するものです。

一方、WebRequestHandler.ReadWriteTimeoutHttpWebRequestにコピーされ、ReadTimeoutWriteTimeoutの両方の要求ストリームに設定されます。つまり、これはストリームレベルでのタイムアウトであり、最終的にはソケットレベルのタイムアウトになります。

両方を設定した場合、操作の合計がHttpClient.Timeoutを超えるとタイムアウトし、ストリームからの読み取りまたは書き込みにWebRequestHandler.ReadWriteTimeoutを超える時間がかかると、タイムアウトします。発生したタイムアウト例外に違いがあるかどうかはわかりませんが。

23
weston

WebRequestHandler.ReadWriteTimeout-サーバーへの要求の書き込みまたはサーバーからの応答の読み取り時のタイムアウトをミリ秒単位で取得または設定します。

HttpClient.Timeout-リクエストがタイムアウトするまで待機するTimeSpanを取得または設定します。

ここで、WebRequestHandlerHTTPClientのラッパーであり、WebRequestHandlerHttpClientHandlerから派生しますが、通常は完全な.NETでのみ使用できるプロパティを追加します。結論としては、同じことではありません。

詳細については、このリンクを参照してください- http://blogs.msdn.com/b/henrikn/archive/2012/08/07/httpclient-httpclienthandler-and-httpwebrequesthandler.aspx

1
Arindam Nayak