HttpClient
オブジェクトのタイムアウトをHttpClient.Timeout
で直接設定できますが、最近WebRequestHandler
の派生物であるHttpClientHandler
クラスについて読みました。
WebRequestHandler
にはReadWriteTimeout
プロパティがあります。 HttpClient.Timeout
と一緒に使用すると、リクエストの操作にどのように影響しますか?
SendAsync
を実行すると、CancellationTokenSource
にHttpClient.Timeout
が配置されます。つまり、このタイムアウトは非同期操作全体に対するものです。
一方、WebRequestHandler.ReadWriteTimeout
はHttpWebRequest
にコピーされ、ReadTimeout
とWriteTimeout
の両方の要求ストリームに設定されます。つまり、これはストリームレベルでのタイムアウトであり、最終的にはソケットレベルのタイムアウトになります。
両方を設定した場合、操作の合計がHttpClient.Timeout
を超えるとタイムアウトし、ストリームからの読み取りまたは書き込みにWebRequestHandler.ReadWriteTimeout
を超える時間がかかると、タイムアウトします。発生したタイムアウト例外に違いがあるかどうかはわかりませんが。
WebRequestHandler.ReadWriteTimeout
-サーバーへの要求の書き込みまたはサーバーからの応答の読み取り時のタイムアウトをミリ秒単位で取得または設定します。
HttpClient.Timeout
-リクエストがタイムアウトするまで待機するTimeSpan
を取得または設定します。
ここで、WebRequestHandler
はHTTPClient
のラッパーであり、WebRequestHandler
はHttpClientHandler
から派生しますが、通常は完全な.NETでのみ使用できるプロパティを追加します。結論としては、同じことではありません。
詳細については、このリンクを参照してください- http://blogs.msdn.com/b/henrikn/archive/2012/08/07/httpclient-httpclienthandler-and-httpwebrequesthandler.aspx