Maison > développement back-end > C++ > Comment puis-je appeler de manière synchrone une méthode asynchrone en C# ?

Comment puis-je appeler de manière synchrone une méthode asynchrone en C# ?

DDD
Libérer: 2025-01-19 13:36:09
original
663 Les gens l'ont consulté

How Can I Synchronously Call an Asynchronous Method in C#?

Exécuter des méthodes asynchrones de manière synchrone

La programmation asynchrone en C# offre un moyen efficace de gérer les opérations de longue durée sans geler le thread principal de l'application. Cependant, des situations peuvent survenir dans lesquelles vous devez appeler une méthode asynchrone de manière synchrone à partir d'un contexte synchrone.

La solution : employer Task.Run

Pour réaliser une exécution synchrone d'une méthode asynchrone, la méthode Task.Run propose une solution pratique. Il décharge l'opération asynchrone sur un thread du pool de threads, permettant au thread appelant d'attendre la fin :

<code class="language-csharp">string code = Task.Run(() => GenerateCodeAsync()).GetAwaiter().GetResult();</code>
Copier après la connexion

Pourquoi éviter d'utiliser directement .Result ?

Bien qu'accéder à la propriété Result d'une tâche puisse sembler simple, cela comporte deux risques potentiels :

  1. Scénarios de blocage : L'utilisation directe de .Result peut entraîner des blocages si l'opération asynchrone tente d'accéder au thread principal alors qu'il est déjà bloqué en attendant le résultat. Task.Run atténue ce risque en exécutant l'opération asynchrone sur un thread séparé.
  2. Gestion des exceptions : La propriété .Result encapsule les exceptions de la méthode asynchrone dans un AggregateException. L'utilisation de .GetAwaiter().GetResult() évite cela en déballant l'exception, simplifiant ainsi la gestion des erreurs.

Résumé

L'utilisation de Task.Run en conjonction avec son waiter fournit une approche fiable et efficace pour invoquer de manière synchrone des méthodes asynchrones dans du code synchrone. Cette méthode évite les blocages potentiels et simplifie la gestion des exceptions.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal