Heim >Backend-Entwicklung >C++ >Wie rufe ich asynchronen Code in C#-Konsolenanwendungen ordnungsgemäß auf?

Wie rufe ich asynchronen Code in C#-Konsolenanwendungen ordnungsgemäß auf?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-05 15:49:45261Durchsuche

How Do I Properly Invoke Asynchronous Code in C# Console Applications?

Asynchroner Aufruf in Konsolenanwendungen: Den „Up“- und „Down“-Mythos entlarven

In C# ist dies beim Aufruf asynchroner Methoden der Fall Es wird allgemein behauptet, dass die Synchronisierung „oben“ und „unten“ im Aufrufstapel aufrechterhalten werden muss. Dieses Dogma gilt jedoch nicht für Konsolenanwendungen.

Bedenken Sie diesen Codeausschnitt:

public static async Task<int> SumTwoOperationsAsync()
{
    // Simulate time-consuming operations
    var firstTask = GetOperationOneAsync();
    var secondTask = GetOperationTwoAsync();

    // Sum the results of the operations
    return await firstTask + await secondTask;
}

private static async Task<int> GetOperationOneAsync()
{
    await Task.Delay(500); // Simulating operation delay
    return 10;
}

private static async Task<int> GetOperationTwoAsync()
{
    await Task.Delay(100); // Simulating operation delay
    return 5;
}

Gemäß der „oben und unten“-Regel erscheint es logisch, die Hauptfunktion zu markieren , wobei SumTwoOperationsAsync aufgerufen wird, als asynchron. Diese Annahme ist jedoch falsch. Konsolenanwendungen unterstützen keine asynchronen Einstiegspunkte. Der Versuch, dies zu tun, führt zu einem Kompilierungsfehler mit der Meldung „Ein Einstiegspunkt kann nicht mit dem Modifikator ‚async‘ markiert werden.“

Wie rufen wir also asynchronen Code in Konsolenanwendungen auf? Es gibt zwei Hauptansätze:

  1. Verwenden von Wait oder GetAwaiter().GetResult(): Diese Methode wartet synchron auf die von SumTwoOperationsAsync zurückgegebene Aufgabe.
static void Main()
{
  MainAsync().Wait();
  // Alternatively, to avoid wrapping exceptions in AggregateException:
  // MainAsync().GetAwaiter().GetResult();
}

static async Task MainAsync()
{
  // Async code goes here
}
  1. Verwenden eines benutzerdefinierten Kontexts: Sie Sie können Ihren eigenen Kontext zum Aufrufen asynchroner Methoden erstellen. Dieser Ansatz bietet mehr Kontroll- und Fehlerbehandlungsmöglichkeiten.
static void Main()
{
  AsyncContext.Run(() => MainAsync());
}

static async Task MainAsync()
{
  // Async code goes here
}

Umfassendere Einblicke in asynchrone Konsolenanwendungen finden Sie im bereitgestellten Blogbeitrag. Denken Sie daran, dass die „Auf- und Ab“-Regel möglicherweise nicht in allen Szenarien nahtlos gilt.

Das obige ist der detaillierte Inhalt vonWie rufe ich asynchronen Code in C#-Konsolenanwendungen ordnungsgemäß auf?. 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