Question :
Dans une application console à thread unique, comment peut-on coder après l'exécution du mot clé wait puisque le thread est verrouillé par task.Wait() ? Un nouveau thread prend-il le relais ou le thread principal quitte-t-il d'une manière ou d'une autre task.Wait() pour exécuter le 后续代码 ?
Réponse :
Mécanisme d'exécution :
Lorsque le mot clé wait est rencontré dans une méthode asynchrone comme MyAsyncMethod(), le code restant dans la méthode est considéré comme une continuation. Le mot clé wait suspend effectivement l'exécution de la méthode jusqu'à ce que la tâche en attente (par exemple, MyOtherAsyncMethod()) se termine.
Suite du thread :
Par défaut, la suite de une méthode asynchrone s'exécute sur le même contexte de synchronisation que le code avant le mot clé wait. Dans le cas d'une application d'interface utilisateur, cela signifie que le code après l'attente s'exécutera sur le thread principal de l'interface utilisateur.
Scénario dans une application à thread unique :
Dans Cependant, une application console à thread unique appelant task.Wait() bloque l'exécution du thread principal. Par conséquent, le code de continuation après wait ne peut pas s'exécuter car le thread est effectivement verrouillé.
Résolution :
Pour permettre au code de continuation de s'exécuter dans une application monothread, vous avez deux options :
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!