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!