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
Libérer: 2025-02-01 16:51:09
original
792 Les gens l'ont consulté

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>:

class Program
{
    static async Task Main(string[] args)
    {
        Bootstrapper bs = new Bootstrapper();
        var list = await bs.GetList();
    }
}
Copier après la connexion

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:

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();
    }
}
Copier après la connexion

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:

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();
    }
}
Copier après la connexion

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 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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal