C# 当网络连接中断时,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

我发现,如果在执行调用之前网络适配器被“禁用”,或者没有任何可用的网络,HttpClient就不会超时或抛出异常

下面是我的代码示例

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;
}