Wie wirken sich verschiedene Async/Await-Modi in C# auf die Ausführungszeit aus?
Asynchrones Warten: Warten und Nicht-Warten (nach dem Start ignoriert)
Detaillierte Code-Erklärung
Bedenken Sie den folgenden Code:
<code class="language-csharp">static async Task Callee() { await Task.Delay(1000); } static async Task Caller() { Callee(); // #1 启动后忽略 await Callee(); // #2 >1s Task.Run(() => Callee()); // #3 启动后忽略 await Task.Run(() => Callee()); // #4 >1s Task.Run(async () => await Callee()); // #5 启动后忽略 await Task.Run(async () => await Callee()); // #6 >1s } static void Main(string[] args) { var stopWatch = new Stopwatch(); stopWatch.Start(); Caller().Wait(); stopWatch.Stop(); Console.WriteLine($"Elapsed: {stopWatch.ElapsedMilliseconds}"); Console.ReadKey(); }</code>
Aufruflogik
#1: Der einfachste Weg, ihn nach dem Start zu ignorieren. #2: Einfach warten. #3: Starten Sie eine asynchrone Methode für einen Thread-Pool-Thread und ignorieren Sie das Ergebnis. #4: Starten Sie eine asynchrone Methode in einem Thread-Pool-Thread und warten Sie asynchron auf deren Abschluss. #5: Gleich wie #3. #6: Gleich wie #4.
Task.Run und asynchrone Lambda-Ausdrücke
Obwohl Task.Run einen neuen Thread startet, entspricht Task.Run(async => ...) Task.Factory.StartNew(async => ...), das im Thread erstellt wird pool Eine neue Aufgabe und starte sie sofort.
Hinweise, die nach dem Start ignoriert werden sollten
Es ist wichtig zu beachten, dass Methoden, die nach dem Start ignoriert werden, zu unbehandelten Ausnahmen führen können, die zum Absturz der Anwendung führen können. Daher ist es wichtig, die Auswirkungen vor der Verwendung sorgfältig abzuwägen.
Das obige ist der detaillierte Inhalt vonWie wirken sich unterschiedliche Async/Await-Muster auf die Ausführungszeit in C# aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!