我有一个ASP.NET Web API Z
,它正在调用两个服务,A
和B
。
客户端呼叫Z
将在500毫秒后超时。在超时之前,我已经专用了150ms来从A
获得响应,在超时之前我有300ms到B
。这两个HttpClient
的超时都是使用Timeout
属性设置的。
当B
的超时设置为300毫秒时,我在300毫秒内没有得到响应。我得到了TaskCancelledException
。
但是,当我将B
的超时设置为1秒时,我得到的端到端响应为~180-240ms,小于B
本身的超时。
以下是相关代码:
var client = new HttpClient()
{
BaseAddress = baseAddress,
Timeout = TimeSpan.Parse("00:00:00.300");
};
using (HttpResponseMessage response = await client.PostAsync(_endpoint, content))
{
// ...
}
例外:
System.Net.WebException occurred
Message: Exception thrown: 'System.Net.WebException' in System.dll
Additional information: The request was aborted: The request was canceled.
我做错了吗?有人可以解释这种奇怪的行为吗?