Maison >développement back-end >C++ >Async/Await en C# : attendre ou ne pas attendre ? L'impact sur l'exécution
Utilisation de Async/Await en C# : Attendre ou ne pas attendre ? Impact sur l'exécution
Le code suivant contient six appels à la méthode Callee
, chacun exécuté de manière différente :
Appel asynchrone (Fire-and-forget) : Callee
La méthode est appelée de manière asynchrone et n'attend pas. La méthode s'exécute de manière asynchrone en arrière-plan et la méthode appelante poursuit son exécution immédiatement.
Attendez un appel asynchrone : La méthode Callee
est appelée et utilisez await
pour attendre son achèvement. La méthode appelante attendra la fin de la méthode Callee
avant de continuer à exécuter le code suivant. Assurez-vous que la méthode Callee
se termine avant d'exécuter le code après celle-ci.
Appels asynchrones à l'aide de Task.Run : La méthode Callee
est démarrée à l'aide de Task.Run
mais n'attend pas le résultat. Comme dans le cas 1, la méthode Callee
s'exécute en arrière-plan et la méthode appelante continue son exécution immédiatement.
Utilisez Task.Run et attendez l'appel asynchrone : La méthode Callee
est démarrée en utilisant Task.Run
et attendez le résultat. Ceci est équivalent au cas 2, où la méthode appelante attend la fin de la méthode Callee
avant de continuer.
Appel asynchrone utilisant Task.Run et async : Identique au cas 3, sauf que la méthode Callee
est déclarée comme async
. Le mot-clé async
permet d'appeler une méthode de manière asynchrone même si elle est encapsulée par Task.Run
.
Utilisez Task.Run et async et attendez l'appel asynchrone : Identique au cas 4, sauf que la méthode Callee
est déclarée comme async
. De même, le mot-clé async
autorise une méthode wait même si elle est enveloppée par Task.Run
.
Résumé : La logique sous-jacente à ces appels est la suivante :
Cas 1 et 3 : La méthode Callee
s'exécute sur un thread en arrière-plan et la méthode appelante continue son exécution immédiatement.
Cas 2 et 4 : La méthode appelante attend que la méthode Callee
se termine avant d'exécuter le code suivant.
Cas 5 et 6 : Ce sont des appels asynchrones utilisant Task.Run
pour un traitement parallèle supplémentaire. Cependant, le mot-clé async
permet de les attendre selon les besoins.
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!