Maison > développement back-end > C++ > Comment l'exécution du code reprend-elle après un mot clé « attendre » en C# ?

Comment l'exécution du code reprend-elle après un mot clé « attendre » en C# ?

Susan Sarandon
Libérer: 2024-12-31 08:30:11
original
901 Les gens l'ont consulté

How Does Code Execution Resume After an `await` Keyword in C#?

Comprendre l'exécution du code après le mot-clé wait

Dans une application monothread, le mot-clé wait peut prêter à confusion. Lorsque le code rencontre le mot-clé wait dans une méthode asynchrone, il revient à la méthode appelante et cède le contrôle au thread d'interface utilisateur. Cependant, comprendre comment le code après l'attente est exécuté peut être difficile.

Contrairement à l'hypothèse selon laquelle le thread principal reste verrouillé, le code après l'attente peut être exécuté par un thread différent. Ce comportement est déterminé par le contexte de synchronisation. Par défaut, le modèle waitable pour Task utilise le contexte de synchronisation actuel au moment de l'expression wait.

Par exemple, si le code est exécuté dans le thread de l'interface utilisateur, la suite (la partie qui suit l'attente) sera reprendre l'exécution sur le même thread d'interface utilisateur. Cependant, dans le cas de threads de pool de threads, la suite ne reprend pas nécessairement sur le même thread.

Il est crucial de reconnaître que le blocage du thread de l'interface utilisateur, comme avec l'appel Wait() dans le code fourni exemple, peut empêcher l’exécution de la suite. Dans les scénarios où les tâches peuvent impliquer un travail sur le thread actuel et que leur état d'achèvement est inconnu, recourir à Wait() ou Result est déconseillé.

Pour éviter de s'appuyer sur le contexte de synchronisation par défaut, la méthode Task.ConfigureAwait peut être utilisé. Cela vous permet de spécifier que la continuation peut s'exécuter sur n'importe quel thread, ce qui la rend adaptée aux méthodes de bibliothèque dépourvues de préférence de thread. En tirant parti de la syntaxe ConfigureAwait(false), vous indiquez votre désir de détacher la suite du contexte actuel, facilitant ainsi un code multithread plus robuste.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal