Подтвердить что ты не робот

Async и Await с HttpWebRequest.GetResponseAsync

Я пытаюсь использовать Async и 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 и вместо этого выполняю синхронное ожидание, он работает, но мне нужно, чтобы он выполнялся асинхронно.

Что мне не хватает в этом коде, который вызывает ожидание, чтобы он никогда не возвращался?

4b9b3361

Ответ 1

Я подозреваю, что в дополнение к вашему стеку вызовов вы вызываете Wait или Result в возвращаемом Task. Это приведет к тупиковой ситуации, о которой я расскажу в своем блоге.

Следуйте этим рекомендациям, чтобы избежать тупика:

  • Не блокируйте код async; используйте async до конца.
  • В ваших "библиотечных" методах используйте ConfigureAwait(false).