Maison >développement back-end >C++ >Fire-and-Forget en C# : Async/Await vs. l'ancien délégué async – Quelle approche est la meilleure ?
« Déclencher et oublier » en C# : Async/Await vs. anciens délégués asynchrones – quelle approche est la meilleure ?
Dans le but de simplifier les appels « fire and Forget » en C#, les développeurs peuvent rencontrer des défis lors de la transition vers la nouvelle syntaxe asynchrone. Cet article explore les différences entre les anciennes méthodes et les nouvelles méthodes.
Dans l'ancienne approche (démontrée par le délégué "async" dans l'exemple de code), le thread sous-jacent était terminé une fois la méthode EndInvoke() appelée. La méthode BeginInvoke() garantit que le thread est démarré, permettant aux opérations « démarrer et oublier » d'appeler la méthode DoIt() de manière asynchrone. Bien que cette approche fonctionne, elle nécessite la fermeture manuelle du handle d’attente asynchrone.
La nouvelle syntaxe asynchrone (illustré par la méthode DoIt2()) élimine le besoin de EndInvoke() et de gestion de la fermeture. Cependant, il introduit l'obligation d'attendre Task.Yield(), ce qui nécessite que les méthodes asynchrones existantes soient remplacées pour ajouter cet espace réservé.
Pour résoudre le problème de l'appel asynchrone de la méthode synchrone A() sans créer de complexité inutile, les développeurs peuvent éviter d'utiliser async void et appeler A() directement en utilisant Task.Run(A). Cette approche émule l'ancien délégué asynchrone sans la complexité de async/await.
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!