Utilisez Task.Run pour appeler des méthodes asynchrones de manière synchrone
La programmation asynchrone nous permet d'effectuer des opérations de longue durée sans bloquer le thread principal. Cependant, dans certains cas, nous devrons peut-être appeler des méthodes asynchrones de manière synchrone. Voici comment y parvenir à l'aide de Task.Run :
Scène :
Considérez la méthode asynchrone suivante :
<code class="language-c#">public async Task<string> GenerateCodeAsync() { string code = await GenerateCodeService.GenerateCodeAsync(); return code; }</code>
Supposons que nous devions appeler cette méthode de manière synchrone à partir d'une autre méthode synchrone.
Solution :
Pour exécuter une méthode asynchrone de manière synchrone, nous pouvons utiliser la méthode Task.Run pour l'exécuter dans un thread de pool de threads :
<code class="language-c#">string code = Task.Run(() => GenerateCodeAsync()).GetAwaiter().GetResult();</code>
Ce code utilise les étapes suivantes :
Inconvénients de l'utilisation de .Result directement :
La méthode simple consistant à accéder directement à la propriété Result de la tâche (c'est-à-dire string code = GenerateCodeAsync().Result;
) doit être évitée car elle présente les inconvénients suivants :
.GetAwaiter().GetResult()
nous évitons ce problème et recevons directement l'exception. 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!