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# ?

Patricia Arquette
Libérer: 2025-01-19 13:43:10
original
795 Les gens l'ont consulté

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

Appeler de manière synchrone des méthodes asynchrones

Question :

Vous disposez d'une méthode asynchrone avec la signature suivante :

<code class="language-c#">public async Task<string> GenerateCodeAsync()
{
    string code = await GenerateCodeService.GenerateCodeAsync();
    return code;
}</code>
Copier après la connexion

Cependant, vous devez appeler cette méthode de manière synchrone dans un contexte de synchronisation. Comment y parvenir ?

Solution :

Afin d'appeler une méthode asynchrone de manière synchrone, vous pouvez utiliser un thread de pool de threads pour exécuter la méthode. En utilisant l'attente de la tâche, vous pouvez bloquer le thread appelant jusqu'à la fin de l'opération asynchrone :

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

Remarque :

Vous devez faire attention aux inconvénients de l'utilisation directe de .Result :

  1. Deadlock : L'utilisation de .Result peut provoquer un blocage car le thread principal est bloqué, empêchant la méthode asynchrone de se terminer. Pour éviter cela, utilisez .ConfigureAwait(false) avec prudence. Cette approche n’est pas sans complications. Cependant, utiliser Task.Run pour exécuter une méthode asynchrone sur un thread de pool de threads élimine ce problème potentiel.
  2. Gestion des exceptions : .Result Encapsulez toutes les exceptions lancées dans une méthode asynchrone dans AggregateException. Pour éviter ce problème, utilisez plutôt .GetAwaiter().GetResult().

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