When you perform a SendAsync
the HttpClient.Timeout
is placed on the CancellationTokenSource
. This means this timeout is for the entire async operation.
On the other hand, WebRequestHandler.ReadWriteTimeout
is copied to the HttpWebRequest
where it is set on the request stream both ReadTimeout
and WriteTimeout
. So this is more a timeout at the stream level, which is ultimately a socket level timeout.
If you set both, then if the operation takes more than HttpClient.Timeout
in total it will timeout, and if a read or write from the stream takes longer than WebRequestHandler.ReadWriteTimeout
it will also timeout. Though I am not sure if there is a difference in the timeout exceptions raised.