【发布时间】:2015-05-14 15:55:42
【问题描述】:
我正在处理两个相互通信的 Web API 项目。第一个 Web API 使用 HttpClient 类调用第二个。
我想做的是在调用第二个 Web API 时设置一个短的超时时间(500 毫秒),如果我在那段时间内没有得到响应,就跳过处理结果的下一行客户端,但继续在服务器端处理请求(第二个 API)。
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Clear();
client.Timeout = this.Timeout; // (500ms)
HttpResponseMessage response = client.PostAsJsonAsync(EndPoint, PostData).Result;
if (response.IsSuccessStatusCode)
{
return response.Content.ReadAsAsync<T>().Result;
}
else
{
throw new CustomException()
}
}
它在第一个 API 端有效,但是在第二个 API(服务器)中,我得到以下异常:
"A task was canceled."
"The operation was cancelled."
at System.Threading.CancellationToken.ThrowOperationCanceledException()
at System.Threading.CancellationToken.ThrowIfCancellationRequested()
我认为这是由于调用的小超时造成的,当第二个 API 仍在处理结果时结束。
如何在第二个 API 中避免这种行为并继续处理请求?
提前致谢。
【问题讨论】:
标签: c# timeout asp.net-web-api dotnet-httpclient