Heim >Backend-Entwicklung >C++ >Wie soll ich Async-Methoden korrekt von der Hauptmethode in C# aufrufen?

Wie soll ich Async-Methoden korrekt von der Hauptmethode in C# aufrufen?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-01 14:00:14221Durchsuche

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

Asynchrone Methoden direkt aus Main aufrufen: Eine umfassende Anleitung

Eine der bedeutenden Verbesserungen, die in C# eingeführt wurden, ist das Async/Await-Muster, das vereinfacht die Entwicklung asynchroner Operationen. Allerdings kann es etwas schwierig sein, asynchrone Methoden direkt aus Main() aufzurufen.

Um das Problem zu verstehen, betrachten Sie das folgende Codebeispiel:

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;
    }
}

Wenn Sie versuchen, die Go-Methode aufzurufen von Main() wie folgt:

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

Es kann zu einer Deadlock-Situation kommen, die verhindert, dass eine Ausgabe auf dem Bildschirm angezeigt wird.

Die Auflösung liegt beim Modifizieren von Main(), um selbst eine asynchrone Methode zu werden. Für Versionen von C# ab 7.1:

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

Dieser Ansatz ermöglicht die nahtlose Ausführung der asynchronen Vorgänge ohne Blockierung des Hauptthreads.

Falls Sie eine frühere Version von C# verwenden , können Sie den folgenden Code verwenden:

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

Hier blockiert die Wait()-Methode explizit den Hauptthread bis zur Go-Methode wird abgeschlossen.

Denken Sie daran, dass Sie durch die Verwendung des Async/Await-Musters die Komplexität von Rückrufen vermeiden können, was zu saubererem und besser wartbarem Code für asynchrone Vorgänge führt.

Das obige ist der detaillierte Inhalt vonWie soll ich Async-Methoden korrekt von der Hauptmethode in C# aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn