Maison > développement back-end > C++ > Comment dois-je appeler correctement les méthodes asynchrones à partir de la méthode principale en C# ?

Comment dois-je appeler correctement les méthodes asynchrones à partir de la méthode principale en C# ?

Patricia Arquette
Libérer: 2025-01-01 14:00:14
original
228 Les gens l'ont consulté

How Should I Correctly Call Async Methods from the Main Method in C#?

Appel de méthodes asynchrones directement depuis Main : un guide complet

L'une des améliorations significatives introduites en C# est le modèle async/await, qui simplifie le développement d’opérations asynchrones. Cependant, appeler des méthodes asynchrones directement depuis Main() peut être un peu délicat.

Pour comprendre le problème, considérez l'exemple de code suivant :

public class test
{
    public async Task Go()
    {
        await PrintAnswerToLife();
        Console.WriteLine("done");
    }

    public async Task PrintAnswerToLife()
    {
        int answer = await GetAnswerToLife();
        Console.WriteLine(answer);
    }

    public async Task<int> GetAnswerToLife()
    {
        await Task.Delay(5000);
        int answer = 21 * 2;
        return answer;
    }
}
Copier après la connexion

Si vous essayez d'appeler la méthode Go de Main() comme ceci :

class Program
{
    static void Main(string[] args)
    {
        test t = new test();
        t.Go().GetAwaiter().OnCompleted(() =>
        {
            Console.WriteLine("finished");
        });
        Console.ReadKey();
    }
}
Copier après la connexion

Vous pourriez rencontrer une situation de blocage, empêchant toute sortie d'apparaître à l'écran.

La résolution réside en modifiant Main() pour devenir elle-même une méthode asynchrone. Pour les versions de C# à partir de 7.1 :

static async Task Main(string[] args)
{
    test t = new test();
    await t.Go();
    Console.WriteLine("finished");
    Console.ReadKey();
}
Copier après la connexion

Cette approche permet aux opérations asynchrones de s'exécuter de manière transparente sans aucun blocage du thread principal.

Dans le cas où vous utilisez une version antérieure de C# , vous pouvez utiliser le code suivant :

static void Main(string[] args)
{
    test t = new test();
    t.Go().Wait();
    Console.WriteLine("finished");
    Console.ReadKey();
}
Copier après la connexion

Ici, la méthode Wait() bloque explicitement le thread principal jusqu'à ce que la méthode Go se termine.

N'oubliez pas qu'en adoptant le modèle async/wait, vous pouvez éviter la complexité des rappels, ce qui entraîne un code plus propre et plus maintenable pour les opérations asynchrones.

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!

source:php.cn
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