web-dev-qa-db-fra.com

Est .GetAwaiter (). GetResult (); sûr pour une utilisation générale?

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?

23
Cyan

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.

42
Stephen Cleary