J'ai lu à quelques endroits que .GetAwaiter().GetResult();
pouvait provoquer des blocages et que nous devrions utiliser async
/await
à la place. Mais je vois de nombreux exemples de code où cela est utilisé. Est-il acceptable de l'utiliser? Quels sont les cas où il peut se bloquer? Y a-t-il autre chose que je devrais utiliser, comme Task.Wait
?
Comme je le décris sur mon blog, GetAwaiter().GetResult()
peut se bloquer quand il est utilisé dans un contexte un thread à la fois . Cela est le plus souvent observé lorsqu'il est appelé sur le thread d'interface utilisateur ou dans un contexte ASP.NET (pour ASP.NET pré-core).
Wait
a les mêmes problèmes. La solution appropriée consiste à utiliser await
et à rendre le code appelant asynchrone.
Notez que la méthode Main
dans les applications console est une exception à cette règle; il convient parfaitement d'y utiliser. De nombreux exemples de code l'utilisent de cette manière.