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 #?

Comment puis-je exécuter du code asynchrone dans la méthode principale d'une application de console C #?

Barbara Streisand
Libérer: 2025-02-01 17:11:09
original
672 Les gens l'ont consulté

How Can I Run Asynchronous Code in a C# Console Application's Main Method?

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:

class Program
{
    static async Task Main(string[] args)
    {
        // Your asynchronous code here...
    }
}
Copier après la connexion

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:

using Nito.AsyncEx;

class Program
{
    static void Main(string[] args)
    {
        AsyncContext.Run(() => MainAsync(args));
    }

    static async void MainAsync(string[] args)
    {
        // Your asynchronous code here...
    }
}
Copier après la connexion

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

class Program
{
    static void Main(string[] args)
    {
        MainAsync(args).GetAwaiter().GetResult();
    }

    static async Task MainAsync(string[] args)
    {
        // Your asynchronous code here...
    }
}
Copier après la connexion

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!

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