45 votes

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

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

Je ne comprends pas le but du mot clé asynchrone. Pourquoi ne pas simplement autoriser le mot-clé wait chaque fois que la méthode retourne une tâche, tout comme les itérateurs peuvent générer un retour sur n'importe quelle méthode renvoyant un IEnumerable.

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

25voto

jeroenh Points 12777

Il a été introduit principalement pour éviter des problèmes de compatibilité descendante. Si l' async-ness d'une méthode doit être déduit par le compilateur (ce serait grâce à la détection de l' await mots-clés), puis il y a de subtiles scénarios où le code existant voudrais tout d'un coup être traités différemment, en particulier quand vous avez les identifiants (variable ou de la fonction des noms appelés await).

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

15voto

Adam Houldsworth Points 38632

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

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

Le premier paragraphe stipule:

Un certain nombre de personnes m'ont demandé ce qui motive la décision de conception de besoin d'une méthode qui contient un "attendent" l'expression être préfixée avec le mot-clé contextuel "async".

Il conclut:

C'est un ensemble beaucoup des avantages et des inconvénients; après l'évaluation de tous les d'eux, et beaucoup de jouer avec le prototype de compilateur pour voir comment il se sentait, le C# designers installés sur le fait d'exiger "async" sur une méthode qui contient un "en attente". Je pense que c'est un choix raisonnable.

Le court de il est rétro-compatibilité.

Pour en savoir plus:

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

11voto

CodesInChaos Points 60274

Pour moi, la raison la plus convaincante est que la signification de l'instruction return change lorsqu'une fonction devient async . Sans asnyc return x signifie "renvoyer une tâche avec la valeur x " et async signifie "définir le résultat de la tâche sur x .

3voto

Stephen Cleary Points 91731

J'ai écrit un résumé de mot clé async/await questions sur mon blog il y a un moment.

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

Eric Lippert a l' définitif post sur le sujet. Il a aussi été discuté dans les commentaires de ce blog, Channel 9, et forums.

Pour résumer, un seul mot await mot-clé serait trop grand d'une modification de rupture. Le choix était entre un multi-parole attendent (par exemple, await for) ou un mot-clé sur la méthode (async), qui permettrait à l' await mot-clé juste à l'intérieur de cette méthode. Explicitement, des méthodes de marquage async est plus facile pour les humains et les ordinateurs à l'analyse, ils ont donc décidé d'aller avec l' async/await paire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X