20
我试图使用异步和等待做Web请求时,我发现它永远不会过去的等待线。我从Metro应用程序执行此操作,但我也在Winforms应用程序中验证了这个问题。异步和等待与HttpWebRequest.GetResponseAsync
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永远不会返回?
谢谢。这就是它。感谢您的链接,这是非常有帮助的。 –
@Stephen,感谢您的博客文章!澄清问题:如果我在我的lib(基本上是WebClient)中使用'.ConfigureAwait(false)',我可以在调用它时使用'.Result'吗?它似乎工作,但我不知道当我在野外放松时会发生什么。 – Brad
@Brad:是的,只要你调用的异步方法做同样的事情。但是,使用'Result'不是最佳做法;总有更好的选择。 –