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
Patricia Arquetteoriginal
2025-01-19 13:43:10870parcourir

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>

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>

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!

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