Maison > développement back-end > C++ > Tirer et oublier ou attendre dans Async/Await : quelle est la différence et quand devriez-vous les utiliser ?

Tirer et oublier ou attendre dans Async/Await : quelle est la différence et quand devriez-vous les utiliser ?

Barbara Streisand
Libérer: 2025-01-12 13:17:42
original
875 Les gens l'ont consulté

Fire and Forget vs. Awaiting in Async/Await: What's the Difference and When Should You Use Each?

Fire and Forget et Awaiting en Async/Await : différences et scénarios d'utilisation

Le code suivant montre les différentes manières d'appeler la méthode Callee et leurs différences de comportement.

Appel n°1 : Feu et oublier (simple)

Callee La méthode est appelée de manière asynchrone et ne bloque pas l'appelant.

Appel n°2 : Tâche en attente (délai)

La méthode

Callee utilise le mot-clé await et l'appelant attend qu'elle se termine. Puisque la méthode Callee contient un délai de 1000 ms, cela prendra plus d'une seconde à l'appelant.

Appels n°3 et n°5 : Task.Run (Tire et oublier)

Task.Run Soumet la méthode Callee au pool de threads pour exécution. Puisque await n'est pas utilisé, les deux appels sont Fire et Forget et ne bloquent pas l'appelant.

Appels n°4 et n°6 : Task.Run (Attendre la tâche)

Semblable aux n°3 et n°5, mais Task.Run utilise await en interne. Cela les rend équivalents au n°2, l'appelant attendra que la tâche soit terminée.

La différence entre le #3 et le #5

Bien que les numéros 3 et 5 utilisent tous deux Task.Run, il existe des différences subtiles. Dans #3, Callee est appelé directement pour créer une nouvelle tâche sur le pool de threads. Dans #5, Callee est enveloppé dans une expression lambda asynchrone, qui crée une nouvelle tâche avec sa propre machine à états. Cependant, comme les deux missions sont Fire and Forget, la différence n'est pas significative dans ce cas.

Remarques sur Service Fabric

Après la migration vers Service Fabric, HostingEnvironment.QueueBackgroundWorkItem n'est plus pris en charge. Bien qu'il soit possible d'utiliser Task.Run comme alternative, il est préférable d'utiliser un processus en arrière-plan distinct et de communiquer avec lui via une file d'attente. Cela garantit l'isolation entre les services front-end et back-end, évitant ainsi les problèmes de performances ou les blocages.

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