C# 当网络连接中断时,HttpClient从不超时;不存在
我发现,如果在执行调用之前网络适配器被“禁用”,或者没有任何可用的网络,HttpClient就不会超时或抛出异常 下面是我的代码示例C# 当网络连接中断时,HttpClient从不超时;不存在,c#,wpf,dotnet-httpclient,C#,Wpf,Dotnet Httpclient,我发现,如果在执行调用之前网络适配器被“禁用”,或者没有任何可用的网络,HttpClient就不会超时或抛出异常 下面是我的代码示例 private static async Task<string> ExecuteHttpMethod(HttpMethod httpMethod, string url, object item) { string json = JsonConvert.SerializeObject(item); HttpContent httpC
private static async Task<string> ExecuteHttpMethod(HttpMethod httpMethod, string url, object item)
{
string json = JsonConvert.SerializeObject(item);
HttpContent httpContent = new StringContent(json, Encoding.UTF8, "application/json");
var httpClient = new HttpClient();
httpClient.Timeout = new TimeSpan(0, 0, 10);
Task<HttpResponseMessage> responseTask = null;
switch (httpMethod.Method)
{
case "GET":
{
responseTask = httpClient.GetAsync(url);
break;
}
case "POST":
{
responseTask = httpClient.PostAsync(url, httpContent);
break;
}
default:
{
throw new NotImplementedException(string.Format("{0} is not supported.", httpMethod.Method));
}
}
try
{
responseTask.Result.EnsureSuccessStatusCode();
string jsonResult = await responseTask.Result.Content.ReadAsStringAsync();
return jsonResult;
}
catch (Exception ex)
{
Debug.Write(ex.ToString());
return string.Empty;
}
}
我想说的不是wait(特别是在您的switch语句中)。我还尝试在GetAsync()方法之前使用wait,但结果相同。当您删除
的所有实例时,您是否可以发布您遇到问题的代码。Result
已更新,删除了.Result的所有实例。这并不是说它永远都不会完成,而是。
HttpContent httpContent = new StringContent(json, Encoding.UTF8, "application/json");
var httpClient = new HttpClient();
httpClient.Timeout = new TimeSpan(0, 0, 10);
HttpResponseMessage responseTask = null;
switch (httpMethod.Method)
{
case "GET":
{
responseTask = await httpClient.GetAsync(url);
break;
}
case "POST":
{
responseTask = await httpClient.PostAsync(url, httpContent);
break;
}
default:
{
throw new NotImplementedException(string.Format("{0} is not supported.", httpMethod.Method));
}
}
try
{
responseTask.EnsureSuccessStatusCode();
string jsonResult = await responseTask.Content.ReadAsStringAsync();
return jsonResult;
}
catch (Exception ex)
{
Debug.Write(ex.ToString());
return string.Empty;
}