I have an ASP.NET Web API Z
that is calling two services, A
and B
.
The client calling Z
will timeout after 500ms. I have dedicated 150ms to getting a response from A
before timing out, and 300ms to B
before timing out. The timeout for both of these HttpClient
s is set using the Timeout
property.
When the timeout for B
is set to 300ms, I do not get a response in 300ms. I get a TaskCancelledException
.
However, when I set the timeout for B
to 1 second, I get an end-to-end response of ~180-240ms, less than the timeout for B
itself.
Here's the relevant code:
var client = new HttpClient()
{
BaseAddress = baseAddress,
Timeout = TimeSpan.Parse("00:00:00.300");
};
using (HttpResponseMessage response = await client.PostAsync(_endpoint, content))
{
// ...
}
Exception:
System.Net.WebException occurred
Message: Exception thrown: 'System.Net.WebException' in System.dll
Additional information: The request was aborted: The request was canceled.
Is there something that I"m doing wrong? Can someone explain this strange behavior?