J'essaie d'utiliser Async et Await lors d'une demande Web et je constate qu'elle ne dépasse jamais la ligne d'attente. Je fais cela à partir d'une application Metro, mais j'ai également vérifié le problème dans une application 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(); ;
}
Si je n'utilise pas wait et effectue une attente synchrone à la place, cela fonctionne, mais j'en ai besoin pour fonctionner de manière asynchrone.
Qu'est-ce qui me manque dans ce code qui fait que l'attente ne revient jamais?
Je soupçonne que plus haut dans votre pile d'appels, vous appelez soit Wait
ou Result
sur le Task
retourné. Cela entraînera un blocage, comme je le décris sur mon blog .
Suivez ces meilleures pratiques pour éviter l'impasse:
async
; utilisez async
jusqu'en bas.ConfigureAwait(false)
.