Heim >Backend-Entwicklung >C++ >Wie rufe ich asynchronen Code in C#-Konsolenanwendungen ordnungsgemäß auf?
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:
static void Main() { MainAsync().Wait(); // Alternatively, to avoid wrapping exceptions in AggregateException: // MainAsync().GetAwaiter().GetResult(); } static async Task MainAsync() { // Async code goes here }
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!