GetStringAsync超时没有效果

All*_*ano 0 c#

我有以下代码:

public static string createRequest(string url, int timeout = 1)
{

    Task<string> responseString;

    using (var client = new System.Net.Http.HttpClient())
    {
        responseString = client.GetStringAsync(url);
        responseString.Wait(new TimeSpan(0, 0, timeout));
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我第一次在调试器中运行此代码,则只有很长一段时间(1-2 分钟)后才会发生超时。第二次跑得更快,大约 3-4 秒后完成一轮。

如果我在此调用后在某些代码上放置断点,它有时会运行得更快,但主要需要很长时间。

即使有定义的超时,为什么代码仍需要如此长的时间跨度?

事实上,responseString.StatusTaskStatus.Canceled,这正是我所期望的(没有设备绑定到该 IP)。

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

Mat*_*ero 5

您不应该设置对象的超时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
     }
}
Run Code Online (Sandbox Code Playgroud)