同步调用httpclienthandler不等待
synchronous call httpclienthandler does not wait
我调用了以下内容,但我注意到如果我调用的 webapi 花费的时间超过 41 秒,它只会 return 导致空值。
我尝试设置 client.timeout 设置,但这似乎没有什么不同。我究竟做错了什么?
HttpClientHandler handler = new HttpClientHandler()
{
Credentials = credentials
};
using (var client = new System.Net.Http.HttpClient(handler))
{
client.Timeout.Add(new TimeSpan(1, 0, 0));
client.BaseAddress = new Uri(site.ToString());
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
try
{
string target = site.ToString() + apiPath + query;
var response = client.GetAsync(target).Result;
response.EnsureSuccessStatusCode();
if (response.IsSuccessStatusCode)
{
var result =
response.Content.ReadAsStringAsync().Result;
if (!String.IsNullOrEmpty(result))
{
return result;
}
else
{
return null;
}
}
else
{
return null;
}
}
catch (Exception ex)
{
return null;
}
}
这一行:
client.Timeout.Add(new TimeSpan(1, 0, 0));
什么都不做,因为 TimeSpan 是不可变的。它只是 returns 一个值,您不会使用它。我想你反而想要:
client.Timeout = new TimeSpan(1, 0, 0);
我调用了以下内容,但我注意到如果我调用的 webapi 花费的时间超过 41 秒,它只会 return 导致空值。
我尝试设置 client.timeout 设置,但这似乎没有什么不同。我究竟做错了什么?
HttpClientHandler handler = new HttpClientHandler()
{
Credentials = credentials
};
using (var client = new System.Net.Http.HttpClient(handler))
{
client.Timeout.Add(new TimeSpan(1, 0, 0));
client.BaseAddress = new Uri(site.ToString());
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
try
{
string target = site.ToString() + apiPath + query;
var response = client.GetAsync(target).Result;
response.EnsureSuccessStatusCode();
if (response.IsSuccessStatusCode)
{
var result =
response.Content.ReadAsStringAsync().Result;
if (!String.IsNullOrEmpty(result))
{
return result;
}
else
{
return null;
}
}
else
{
return null;
}
}
catch (Exception ex)
{
return null;
}
}
这一行:
client.Timeout.Add(new TimeSpan(1, 0, 0));
什么都不做,因为 TimeSpan 是不可变的。它只是 returns 一个值,您不会使用它。我想你反而想要:
client.Timeout = new TimeSpan(1, 0, 0);