Maison > développement back-end > C++ > Comment puis-je appeler en toute sécurité des méthodes asynchrones à partir de méthodes synchrones en C #?

Comment puis-je appeler en toute sécurité des méthodes asynchrones à partir de méthodes synchrones en C #?

DDD
Libérer: 2025-02-02 12:51:09
original
423 Les gens l'ont consulté

How Can I Safely Call Asynchronous Methods from Synchronous Methods in C#?

Intégration du code asynchrone et synchrone dans C #

De nombreux projets C # ne sont pas entièrement asynchrones. Cet article relève des défis et des solutions pour appeler des méthodes asynchrones à partir de contextes synchrones.

est-il possible?

Oui, il est possible d'appeler des méthodes asynchrones à partir du code synchrone. Cependant, les différents modèles d'exécution de programmation synchrone et asynchrone peuvent créer des complexités.

Approches de l'intégration sûre

Plusieurs approches facilitent cette intégration:

Méthode 1: Task.WaitAndUnwrapException

Pour les méthodes asynchrones qui ne nécessitent pas de synchronisation de contexte (chacune await utilise ConfigureAwait(false)), Task.WaitAndUnwrapException fournit un moyen sûr d'attendre l'achèvement et de récupérer le résultat:

<code class="language-csharp">var task = MyAsyncMethod();
var result = task.WaitAndUnwrapException(); </code>
Copier après la connexion

Méthode 2: AsyncContext.RunTask (pour les attentes sensibles au contexte)

Si une synchronisation de contexte est nécessaire dans la méthode asynchrone, AsyncContext.RunTask crée un contexte imbriqué pour exécuter la tâche:

<code class="language-csharp">var result = AsyncContext.RunTask(MyAsyncMethod).Result;</code>
Copier après la connexion

Méthode 3: Task.Run (pour la compatibilité du pool de threads)

Lorsque AsyncContext.RunTask n'est pas applicable, Task.Run décharge la méthode asynchrone au pool de threads. La méthode asynchrone doit être compatible avec le contexte du pool de threads:

<code class="language-csharp">var task = Task.Run(async () => await MyAsyncMethod());
var result = task.WaitAndUnwrapException();</code>
Copier après la connexion

Choisir la bonne approche dépend des besoins spécifiques de votre méthode asynchrone et de son interaction avec le code synchrone environnant. Un examen attentif du contexte et des blocages potentiels est crucial.

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