Joh*_*ner 21 c# httpwebrequest async-await windows-8 windows-runtime
我正在尝试在发出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(); ;
}
Run Code Online (Sandbox Code Playgroud)
如果我不使用await而是执行同步等待,它可以工作,但我需要它以异步方式运行.
我在这段代码中遗漏了什么导致await永远不会返回?
Ste*_*ary 34
我怀疑你的呼叫堆栈越来越大,你要么是在呼叫,Wait要么Result是在返回Task.正如我在博客中描述的那样,这将导致死锁.
请遵循以下最佳做法以避免死锁:
async代码; 一直使用async.ConfigureAwait(false).