Maison >développement back-end >C++ >Pourquoi ne puis-je pas utiliser le modificateur «Async» sur la méthode principale d'une application console?

Pourquoi ne puis-je pas utiliser le modificateur «Async» sur la méthode principale d'une application console?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-02-01 16:51:09737parcourir

Why Can't I Use the 'Async' Modifier on the Main Method of a Console App?

Méthode 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!

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