GetStringAsync超时无效

时间:2015-12-15 14:44:08

标签: c#

我有以下代码:

@

如果我第一次在调试器中运行此代码,超时将在很长一段时间后发生(1-2分钟)。第二次它的运行速度更快,并且在大约3-4秒后完成。

如果我在这次调用之后对某些代码设置了断点,它有时会运行得更快,但主要需要很长时间。

为什么即使有定义的超时,代码也需要很长的时间?

实际上 responseString.Status TaskStatus.Canceled ,这正是我所期望的(没有绑定到此IP的设备)。

这段代码有什么问题?谢谢:))

2 个答案:

答案 0 :(得分:3)

您不应设置Task<string>对象的超时。您必须设置HttpClient.Timeout。另外,请考虑使用async/await方法:

public static async Task<string> createRequest(string url, int timeout = 1)
{
     using(var client = new HttpClient())
     {
          client.Timeout = TimeSpan.FromSeconds(timeout);
          string response = await client.GetStringAsync(url);

          // Handle response here

          return handledResponse; // You can return a raw string
     }
}

答案 1 :(得分:0)

可能不是最美的版本,但完全符合我的预期:

    public string AsyncRequest(string url, int timeout)
    {
        string retval = null;

        using (var client = new System.Net.Http.HttpClient())
        {
            client.Timeout = TimeSpan.FromSeconds(timeout);
            try
            {
                retval = client.GetStringAsync(url).Result;

                return retval;
            }
            catch
            {
                AllnetALL3073RemoteSwitch_found = false;

                return null;
            }
        }
    }