Async和Await与HttpWebRequest.GetResponseAsync

时间:2012-10-03 03:37:07

标签: c# windows-8 windows-runtime httpwebrequest async-await

我正在尝试在发出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永不返回?

1 个答案:

答案 0 :(得分:33)

我怀疑您的通话堆栈越来越长,您要么在返回的Wait上拨打ResultTaskThis will cause a deadlock, as I describe on my blog

遵循以下最佳做法以避免死锁:

  1. 不要阻止async代码;一直使用async
  2. 在你的&#34;图书馆&#34;方法,使用ConfigureAwait(false)