Maison >développement back-end >C++ >Async/Await en C# : attendre ou ne pas attendre ? L'impact sur l'exécution

Async/Await en C# : attendre ou ne pas attendre ? L'impact sur l'exécution

Susan Sarandon
Susan Sarandonoriginal
2025-01-12 13:22:43906parcourir

Async/Await in C#:  To Await or Not to Await?  The Impact on Execution

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 :

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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!

Déclaration:
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