Maison >développement back-end >C++ >Comment puis-je exécuter du code asynchrone dans la méthode principale d'une application de console C #?
Exécution du code asynchrone dans la méthode principale de C #: solutions de contournement pour la limitation async
Le modificateur async
n'est pas directement pris en charge sur la méthode Main
dans les anciennes versions de C #. Cependant, plusieurs techniques permettent un fonctionnement asynchrone dans le point d'entrée de votre application de console.
Approche moderne: Async Main (Visual Studio 2017 Mise à jour 3 et ultérieure)
La solution la plus simple, si votre environnement de développement le prend en charge, est de déclarer Main
comme async
et de renvoyer un Task
:
<code class="language-csharp">class Program { static async Task Main(string[] args) { // Your asynchronous code here... } }</code>
en utilisant un contexte asynchrone (pour les versions Visual Studio plus anciennes)
Pour les versions Visual Studio anciennes, ou si vous préférez ne pas utiliser une méthode async
Main
, tirez parti d'une bibliothèque de contexte asynchrone. AsyncContext
du package Nito.AsyncEx
Nuget est un choix populaire:
<code class="language-csharp">using Nito.AsyncEx; class Program { static void Main(string[] args) { AsyncContext.Run(() => MainAsync(args)); } static async void MainAsync(string[] args) { // Your asynchronous code here... } }</code>
Bloquant le thread principal (moins idéal)
Bien que fonctionnel, bloquant directement le fil principal jusqu'à la fin des opérations asynchrones est généralement moins préférée en raison de problèmes potentiels. Cette approche utilise GetAwaiter().GetResult()
:
<code class="language-csharp">class Program { static void Main(string[] args) { MainAsync(args).GetAwaiter().GetResult(); } static async Task MainAsync(string[] args) { // Your asynchronous code here... } }</code>
Remarque importante: L'utilisation de GetAwaiter().GetResult()
est cruciale. Évitez Wait()
ou accédez directement à la propriété Result
, car ceux-ci peuvent masquer les exceptions et entraîner des problèmes plus difficiles à déborder AggregateException
. GetAwaiter().GetResult()
propage correctement les exceptions.
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!