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 и вместо этого выполняю синхронное ожидание, он работает, но мне нужно, чтобы он выполнялся асинхронно.
Что мне не хватает в этом коде, который вызывает ожидание, чтобы он никогда не возвращался?
Ответы
Ответ 1
Я подозреваю, что в дополнение к вашему стеку вызовов вы вызываете Wait
или Result
в возвращаемом Task
. Это приведет к тупиковой ситуации, о которой я расскажу в своем блоге.
Следуйте этим рекомендациям, чтобы избежать тупика:
- Не блокируйте код
async
; используйте async
до конца.
- В ваших "библиотечных" методах используйте
ConfigureAwait(false)
.