我有以下方法:
private static async void SendRequest()
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://google.com");
httpWebRequest.KeepAlive = false;
httpWebRequest.Proxy = null;
httpWebRequest.Timeout = 1;
try
{
await httpWebRequest.GetResponseAsync();
Console.WriteLine("GetResponse Finished");
}
catch (Exception ex)
{
Console.WriteLine("Exception thrown="+ex);
}
}
如果无法解析名称,则抛出异常,但在超时的情况下似乎永远不会抛出异常。如果我使用具有1毫秒的不切实际超时的GetResponse,它总是抛出超时异常,但GetResponseAsync似乎不会发生这种情况。
知道我怎么能像同步方法一样抛出和处理Timeout异常?
答案 0 :(得分:0)
如上所述in the documentation,HttpWebRequest.Timeout
不适用于异步请求。在这种情况下,你必须编写自己的超时代码。
或者你可以升级到HttpClient
,这会为你做很多工作。
答案 1 :(得分:0)
使用 Wait() 来完成异步方法。在 SendRequest() 中将 void 改为 Task
static void Main()
{
SendRequest().Wait()
}
private static async **Task** SendRequest()
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://google.com");
httpWebRequest.KeepAlive = false;
httpWebRequest.Proxy = null;
httpWebRequest.Timeout = 1;
try
{
await httpWebRequest.GetResponseAsync();
Console.WriteLine("GetResponse Finished");
}
catch (Exception ex)
{
Console.WriteLine("Exception thrown="+ex);
}
}