Maison >développement back-end >C++ >Pourquoi ne puis-je pas utiliser le modificateur «Async» sur la méthode principale d'une application console?
Main
de l'application Console et le modificateur async
: une solution Le défi: La programmation asynchrone, en utilisant le mot-clé async
, n'est pas directement prise en charge dans la méthode Main
des applications de console plus anciennes. Cette limitation empêche l'exécution asynchrone simple du code dans le point d'entrée de l'application.
Résolution:
Plusieurs solutions de contournement permettent des opérations asynchrones dans la méthode Main
, selon votre environnement de développement:
1. Visual Studio 2017 Update 3 et plus tard:
Les versions modernes de Visual Studio (mise à jour 2017 3 et ultérieurement) prennent directement en charge async
Main
Méthodes. Changez simplement le type de retour de votre méthode Main
en Task
ou Task<T>
:
<code class="language-csharp">class Program { static async Task Main(string[] args) { Bootstrapper bs = new Bootstrapper(); var list = await bs.GetList(); } }</code>
2. Bloquer le thread principal (pour les anciens studios visuels):
Si vous utilisez une ancienne version Visual Studio, vous pouvez exécuter du code asynchrone en bloquant explicitement le thread principal jusqu'à ce que l'opération asynchrone se termine:
<code class="language-csharp">class Program { static void Main(string[] args) { MainAsync(args).GetAwaiter().GetResult(); } static async Task MainAsync(string[] args) { Bootstrapper bs = new Bootstrapper(); var list = await bs.GetList(); } }</code>
Cette approche appelle une méthode async
d'assistance (MainAsync
) et utilise GetAwaiter().GetResult()
pour attendre son achèvement.
3. Tirer parti d'un contexte asynchrone (par exemple, asyncex):
Pour un flux de contrôle asynchrone plus robuste, envisagez d'utiliser une bibliothèque comme Nito.AsyncEx
. Cela fournit un contexte asynchrone pour votre boucle principale:
<code class="language-csharp">using Nito.AsyncEx; class Program { static void Main(string[] args) { AsyncContext.Run(() => MainAsync(args)); } static async void MainAsync(string[] args) { Bootstrapper bs = new Bootstrapper(); var list = await bs.GetList(); } }</code>
AsyncContext.Run
gère l'exécution asynchrone dans un contexte dédié.
En utilisant l'une de ces méthodes, vous pouvez intégrer avec succès la programmation asynchrone dans la méthode Main
de votre application de console, l'amélioration de l'efficacité et de la réactivité.
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!