当网络连接不存在时,HttpClient永远不会超时

时间:2014-06-16 20:59:04

标签: c# wpf dotnet-httpclient

我发现如果在执行调用之前网络适配器被“禁用”,或者没有任何网络可用,那么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;
    }
}

使用await更新1:

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

0 个答案:

没有答案