我有以下代码:
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.Status是TaskStatus.Canceled,这正是我所期望的(没有设备绑定到该 IP)。
这段代码有什么问题?谢谢 :)
您不应该设置对象的超时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)