Async y espera con HttpWebRequest.GetResponseAsync

Estoy tratando de usar Async y Await cuando hago una solicitud web y encuentro que nunca pasa de la línea de espera. Estoy haciendo esto desde una aplicación de Metro, pero también verifiqué el problema en una aplicación de winforms.

public async Task DoSomething() { string url = "http://imgur.com/gallery/VcBfl.json"; HttpWebRequest request = HttpWebRequest.CreateHttp(url); var ws = await request.GetResponseAsync(); return ws.ResponseUri.ToString(); ; } 

Si no uso esperar y en su lugar realizar una espera síncrona, funciona, pero necesito esto para ejecutar de forma asíncrona.

¿Qué me falta en este código que está causando que la espera nunca vuelva?

Sospecho que más arriba en tu stack de llamadas, estás llamando Wait o Result en la Task devuelta. Esto causará un punto muerto, como describo en mi blog .

Siga estas mejores prácticas para evitar el punto muerto:

  1. No bloquee en código async ; async todo el camino hacia abajo.
  2. En sus métodos de “biblioteca”, use ConfigureAwait(false) .