Question Pourquoi le mot clé async existe-t-il?


En parcourant le canal 9 vidéos msdn j'ai trouvé le commentaire sans réponse suivant et j'espérais que quelqu'un pourrait l'expliquer?

Je ne comprends pas le mot clé asynchrone. Pourquoi ne pas laisser le   attendre le mot clé à chaque fois que la méthode retourne Task, comme les itérateurs   peut générer un retour sur toute méthode qui renvoie un IEnumerable.

Je suis sûr qu'il y a une bonne raison, je voudrais juste comprendre pourquoi la suggestion ci-dessus n'était pas possible.


36
2018-02-10 09:46


origine


Réponses:


Il a été introduit principalement pour éviter les problèmes de compatibilité ascendante. Si la async-ness d'une méthode doit être déduit par le compilateur (ce serait par la détection de await mots-clés), alors il existe des scénarios subtils où le code existant serait soudainement traité différemment, notamment lorsque vous avez des identifiants (noms de variables ou de fonctions appelés await).

Une explication complète est ici: http://blogs.msdn.com/b/ericlippert/archive/2010/11/11/whither-async.aspx


19
2018-02-10 09:58



Je pense que cet article couvre peut-être le raisonnement:

http://blogs.msdn.com/b/ericlippert/archive/2010/11/11/whither-async.aspx

Le premier paragraphe dit:

Un certain nombre de personnes m'ont demandé ce qui motive la décision de concevoir   exige que toute méthode contenant une expression "wait" soit préfixée   avec le mot-clé contextuel "async".

Il conclut:

Cela fait beaucoup de pour et de contre; après les avoir tous évalués, et   beaucoup de choses à jouer avec le compilateur prototype pour voir ce que ça faisait,   les concepteurs C # ont décidé d’exiger "async" sur une méthode qui   contient une "attente". Je pense que c'est un choix raisonnable.

Le plus court est la compatibilité ascendante.

Lectures complémentaires:

http://blogs.msdn.com/b/ericlippert/archive/2010/10/29/asynchronous-programming-in-c-5-0-part-two-whence-await.aspx


15
2018-02-10 09:58



Pour moi, la raison la plus convaincante est que la signification du return déclaration change lorsqu'une fonction devient async. Sans pour autant asnyc  return x signifie "retourner une tâche avec la valeur x", et avec async cela signifie" mettre le résultat de la tâche à x.


8
2018-02-10 10:05



J'ai écrit un résumé des questions asynchrones / en attente de mots clés sur mon blog il y a quelque temps.

Voici la conclusion de la section "Inférence async":

Eric Lippert a la poste définitif sur le sujet. Il a également été discuté dans commentaires de blog, Channel9, et des forums.

En résumé, un seul mot await mot-clé serait un changement trop important. Le choix était entre une attente de plusieurs mots (par exemple, await for) ou un mot-clé sur la méthode (async) qui permettrait à la await mot-clé juste dans cette méthode. Méthodes de marquage explicites async est plus facile à analyser pour les humains et les ordinateurs, alors ils ont décidé d'aller avec le async/await paire.


2
2018-02-10 13:38