Async and Await with HttpWebRequest.GetResponseAsync

只谈情不闲聊 提交于 2019-12-29 06:40:23

问题


I am trying to use Async and Await when making a web request and am finding that it never gets past the await line. I am doing this from a Metro app, but I also verified the problem in a winforms app.

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(); ;
}

If I don't use await and instead perform a synchronous wait, it works, but I need this to run asynchronously.

What am I missing in this code that is causing the await to never return?


回答1:


I suspect that further up your call stack, you're either calling Wait or Result on the returned Task. This will cause a deadlock, as I describe on my blog.

Follow these best practices to avoid the deadlock:

  1. Don't block on async code; use async all the way down.
  2. In your "library" methods, use ConfigureAwait(false).


来源:https://stackoverflow.com/questions/12701545/async-and-await-with-httpwebrequest-getresponseasync

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!