Heim >Backend-Entwicklung >C++ >Wie soll ich Async-Methoden korrekt von der Hauptmethode in C# aufrufen?
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!