我正在尝试在发出Web请求时使用Async和Await,并且发现它永远不会超过await行。我是通过Metro应用程序执行此操作,但我也在winforms应用程序中验证了该问题。
public async Task<string> DoSomething()
{
string url = "http://imgur.com/gallery/VcBfl.json";
HttpWebRequest request = HttpWebRequest.CreateHttp(url);
var ws = await request.GetResponseAsync();
return ws.ResponseUri.ToString(); ;
}
如果我不使用await而是执行同步等待,它可以工作,但我需要它以异步方式运行。
我在这段代码中遗漏了什么导致await永不返回?
答案 0 :(得分:33)
我怀疑您的通话堆栈越来越长,您要么在返回的Wait
上拨打Result
或Task
。 This will cause a deadlock, as I describe on my blog
遵循以下最佳做法以避免死锁:
async
代码;一直使用async
。ConfigureAwait(false)
。