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

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

Patricia Arquette
Patricia Arquetteoriginal
2025-01-19 13:52:12421parcourir

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

Appeler de manière synchrone des méthodes asynchrones

Supposons qu'il existe une méthode asynchrone, disons GenerateCodeAsync(), qui renvoie une tâche. Pour appeler cette méthode de manière synchrone, vous devez trouver un moyen de coordonner le code synchrone et asynchrone.

Une solution consiste à exécuter la méthode asynchrone dans un thread de pool de threads et à utiliser awaiter pour bloquer le thread jusqu'à ce que l'opération soit terminée :

<code class="language-csharp">string code = Task.Run(() => GenerateCodeAsync()).GetAwaiter().GetResult();</code>

Inconvénients de l'utilisation de .Result directement

L'accès direct aux Result propriétés peut entraîner :

  • Deadlock : Un appel à Result bloque le thread principal, empêchant l'exécution du code asynchrone.
  • AggregateExceptions : toutes les exceptions levées par méthodes asynchrones seront encapsulées dans AggregateException.

Pour éviter ces problèmes, GetAwaiter().GetResult()méthode :

  • Exécutez des méthodes asynchrones dans les threads du pool de threads pour éviter les blocages.
  • Déballez toutes les exceptions levées pour y accéder sans gestionnaires de blocs supplémentaires.

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