Pourquoi le fil d'appel marche-t-il dans la méthode ASYNC jusqu'à ce que le intérieur "attend"? p>
Il n'est pas plus propre d'apparaître un fil dès qu'une méthode asynchraine est appelée. De cette façon, vous savez certainement que la méthode ASYNC renvoie immédiatement. Vous n'avez pas à vous soucier de ne rien faire cher aux premières étapes de la méthode ASYNC. P>
J'ai tendance à aimer savoir si une méthode va exécuter du code sur "mon" fil ou non. Que ce soit bloquant ou non. Ce modèle semble ouvrir tout un spectre de possibilités entre les possibilités. P>
Les concepteurs sont beaucoup plus intelligents que je suis donc je suis sûr qu'il y a une bonne raison, j'aimerais juste avoir la tête autour de moi. p>
3 Réponses :
J'aime bien savoir si une méthode va exécuter du code sur "Mon" fil ou non. P> blockQuote>
Je pense que c'est un désir particulier, pas vraiment un bon argument pour / contre toute fonctionnalité. p>
Le point principal d'async / attendre est que le code de démarrage d'une ASYNC OP et de gérer les résultats peut être maintenu dans une seule méthode. p>
Sans cela, vous êtes obligé de casser le code qui appartient logiquement en 2 parties. p>
J'aime penser à Avec cela à l'esprit, il n'a rien à voir avec des fils. P> async..await code> pour être syntaxique sucre pour Programmation de style de passage de continuation forte>. p>
Il n'est pas plus propre d'apparaître un fil dès qu'une méthode asynchraine est appelée. p> blockQuote>
Le point entier des méthodes "async" est de éviter em> frayer un nouveau fil. p>
Vous êtes une asynchronie confuse avec une concurrence. Les méthodes asynchrones n'ont pas besoin de courir sur un autre fil pour être asynchrones. Le point de méthodes asynchrones est qu'ils vous permettent de rompre le travail en petits morceaux qui doivent courir dans un ordre particulier em>, mais pas nécessairement sans faire d'autres travaux sur le même fil em >. p>
Pensez à un fil en tant que travailleur que vous pouvez embaucher. Pensez à une méthode ASYNC en tant que liste de tâches avec des pauses entre les éléments. Si votre liste de choses à faire dit "Allez au magasin, achetez du lait et des œufs, rentrez chez vous, faites une omelette", alors le bénéfice de l'ASYNC est que lorsque quelqu'un appelle votre téléphone portable entre les "œufs d'achat" et le "Go Accueil "Étape et dit" Pouvez-vous m'arrêter par la pharmacie sur le chemin du retour et récupérer ma prescription? " Vous pouvez prendre l'appel et planifier le travail avant em> vous faites l'omelette. Avec des méthodes non asynchronisées, votre téléphone continue de sonner jusqu'à ce que l'omelette soit terminée, puis vous prenez l'appel. L'interface utilisateur bloque jusqu'à ce que vous ayez terminé ce que vous faites. P>
Votre concept est que pour maintenir le fil d'interface utilisateur réactif, le moment où vous obtenez la liste de tâches à faire, vous allez embaucher un gars à courir au magasin pour vous, de sorte que vous êtes libre de prendre l'appel sur le pharmacie. c'est cher et inutile. strong> Tout peut rester sur le même thread em> avec async parce que la tâche à long terme a des points intégrés où l'interface utilisateur doit interrompre et programmer plus de travail . p>
Grande analogie! Je suppose que cela fonctionne bien tant que le temps entre les pauses, quand je suis indisponible pour prendre un appel, ne devient pas trop longtemps. Avec un travailleur pour la location, je ne suis sûr de ne jamais manquer un appel. Avoir peur de manquer l'appel, quand j'ai des gens que je peux embaucher pour des fils bon marché (fils de frai) est la source de mon malaise, je suppose que l'analogie fonctionne, même pour expliquer mes propres sentiments. Réponse acceptée!
@HarryMexican: Si vous considérez que vous considérez les threads de frai pour être «bon marché», ASYNC n'est peut-être pas nécessaire pour vous en premier lieu. Je considère les fils de frai pour être extrêmement coûteux i> et donc être évité à tout prix.
Assez juste. Je ne fais pas beaucoup de programmation de l'interface utilisateur, alors peut-être que c'est pourquoi je n'ai jamais réalisé à quel point ils sont coûteux ... dans tous les cas, le repère de fil d'être cher répond à ma question.
Pour moi éviter le coût de performance des threads supplémentaires, n'est même pas l'argument le plus convaincant. Il évite la complexité d'avoir mon code de base exécuté sur plusieurs threads.
Async / attendre ne pas exclude i> que le travail se produira sur un autre fil, cependant. Cela dépend de la mise en œuvre de l'AWAITER, non?
@Lbushkin: Droite; Le travail, ou une partie de celui-ci, pourrait i> sur un autre fil. Mais l'idée qu'une méthode asynchrone est intrinsèquement i> une méthode qui démarrera un autre thread est erronée.
Vous ne placez pas le mot-clé ASYNC pour les méthodes asynchrones, mais pour des méthodes qui appellent le code asynchrone :)
Juste pour clarifier: j'adore le sucre syntaxiste qui signifie que vous n'avez pas besoin de rappel pour faire des ops ASYNC. C'est la façon dont le flux de threads qui me rend mal à l'aise pour une raison quelconque.