Async attendent vs GetAwaiter().GetResult() et de rappel

Je suis en train d'essayer de trouver la meilleure pratique pour un de mes projet. C'est un cas typique d'application WPF avec une INTERFACE utilisateur qui affiche une liste d'éléments et il y a un service de données qui renvoie le résultat.

Nous appelons le service de manière asynchrone, afin de ne pas bloquer l'INTERFACE utilisateur. Nous avons 2 options en face de nous:

  1. Asynchrone à l'aide de mots-clés vous attendent
    Cela nécessite le marquage de toutes les méthodes Asynchrones de bouton, cliquez sur tous les services de la couche (classe à côté client qui fait l'appel http vers le serveur) et toute méthode entre les deux. Cette approche fonctionne bien pour d'autres la question de la propagation asynchrone partout
  2. Utilisation awaiter et de rappel
    Dans cette approche, l'INTERFACE utilisateur du client appelle le service de la couche et passe un rappel à la couche de service, le service de la couche encapsule l'appel http vers le serveur dans une tâche et l'utilisation GetAwaiter().GetResult(), lorsque le http appel est terminé, il appelle le callback passé par l'INTERFACE utilisateur du client. Dans ce cas, aucune méthode a marqué asynchrone, mais pas vraiment sûr de l'utilisation de GetAwaiter()

    Tâche.Exécuter(async () => //attendre http appel, appeler de rappel).GetAwaiter().GetResult();

Je suis juste essayer de trouver ce qui est une meilleure approche et si il ya des problèmes avec une approche que je devrais être au courant de

Je suis sûr que la deuxième approche peut conduire à la mort des serrures de temps en temps. Je le sais parce que j'ai été confronté à quelque chose de semblable lors du développement avec Windows Universelle.
Il y a aussi la question des exceptions. Je sais qu'avec un plein implémentation asynchrone, vous obtenez le AggregateException à la fin, mais je n'ai aucune idée de ce qui se passe à des exceptions dans le GetAwaiter méthode
Quand vous attendent, vous n'obtenez pas une AggregateException. Vous obtenez l'intérieur d'exception. La même chose arrive avec GetResult.

OriginalL'auteur vikas mittal | 2015-12-31