我正在处理httpclient和超时配置问题。经过大量的谷歌搜索,我得出以下结论:
虽然这可能有效,但我将失去套接字异常并且控制力较差。简而言之,我试图找到一种方法来设置解析/连接服务器的超时时间(约2秒),以及等待一旦与服务器建立连接后响应的更高超时时间。
对我来说这是有意义的,因为我的Web服务器是通过本地网络访问的,所以2秒已经足够得出“服务器不可用”的结论,但一旦服务器开始处理响应,我需要更长的等待响应超时时间。
提前致谢。
- 只有当我连接到一个可用的主机/服务器后,Http客户端超时才有效。
- 如果主机不可用或服务器已关闭,则HttpClient.Timeout无效,并且在约80秒后,我会得到一个包含SocketException(连接被拒绝)的TaskCancelledException。
我了解到httpClient超时仅在服务器接收请求后才起作用,因此,如果主机/服务器不可用,我会遇到与套接字相关的长时间超时。
我需要为我的httpClient getAsync、postAsync等请求配置更广泛的超时,并在指定的时间内停止操作,无论服务器是否可用。
我无法想象如何有效地控制超时时间,那个stackoverflow线程(link)建议在这种情况下采用任务取消方法:
var timeout = Task.Delay(10000); // 10 seconds timeout
var request = httpClient.GetAsync("http://www.google.com");
await Task.WhenAny(timeout, request); // wait for either timeout or the request
if (timeout.IsCompleted) // if the timeout ended first, then handle it
{
// handle timeout
}
// otherwise continue processing the request result
var response = await request;
虽然这可能有效,但我将失去套接字异常并且控制力较差。简而言之,我试图找到一种方法来设置解析/连接服务器的超时时间(约2秒),以及等待一旦与服务器建立连接后响应的更高超时时间。
对我来说这是有意义的,因为我的Web服务器是通过本地网络访问的,所以2秒已经足够得出“服务器不可用”的结论,但一旦服务器开始处理响应,我需要更长的等待响应超时时间。
提前致谢。