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
Freigeben: 2025-01-01 14:00:14
Original
227 Leute haben es durchsucht

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;
    }
}
Nach dem Login kopieren

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();
    }
}
Nach dem Login kopieren

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();
}
Nach dem Login kopieren

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();
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage