我有以下代码:
@
如果我第一次在调试器中运行此代码,超时将在很长一段时间后发生(1-2分钟)。第二次它的运行速度更快,并且在大约3-4秒后完成。
如果我在这次调用之后对某些代码设置了断点,它有时会运行得更快,但主要需要很长时间。
为什么即使有定义的超时,代码也需要很长的时间?
实际上 responseString.Status 是 TaskStatus.Canceled ,这正是我所期望的(没有绑定到此IP的设备)。
这段代码有什么问题?谢谢:))
答案 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;
}
}
}