Est-Tâche.Résultat le même que .GetAwaiter.GetResult()?

J'ai récemment été la lecture d'un code qui utilise beaucoup de méthodes asynchrones, mais alors parfois besoin de les exécuter de manière synchrone. Le code n':

Foo foo = GetFooAsync(...).GetAwaiter().GetResult();

Est-ce le même que

Foo foo = GetFooAsync(...).Result;
  • À partir de la documentation de GetResult: "Ce type et ses membres sont destinés à une utilisation par le compilateur." Autre personne ne devrait pas l'utiliser.
  • Ceci est appelé "la synchronisation via async", et, sauf si vous savez comment la tâche est mise en œuvre peut être un vraiment mauvaise idée. Il peut instantanément blocage dans de nombreux cas (un async/await méthode MVC, par exemple)
  • Ne pas Bloquer sur Async Code
  • Dans le monde réel, nous avons les constructeurs, nous avons "sans attendre" interfaces nous avons besoin pour mettre en œuvre, et il nous est donné de méthodes asynchrones partout. Je serais heureux d'utiliser quelque chose qui fonctionne sans que je me demande pourquoi il est "dangereux", "ne pas utiliser" ou "éviter à tout prix". À chaque fois je dois me débattre avec async à son tour d'un mal de tête.
InformationsquelleAutor Jay Bazuzi | 2013-06-24