Maison >développement back-end >C++ >Quel est l'impact des différents modèles Async/Await sur le temps d'exécution en C# ?
Comment les différents modes Async/Await en C# affectent-ils le temps d'exécution ?
Attente asynchrone : attente et non-attente (ignoré après le démarrage)
Explication détaillée du code
Considérez le code suivant :
<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>
Logique d'appel
#1 : Le moyen le plus simple d'ignorer après le démarrage. #2 : Attendez simplement. #3 : Démarrez une méthode asynchrone sur un thread de pool de threads et ignorez le résultat. #4 : Démarrez une méthode asynchrone sur un thread de pool de threads et attendez son achèvement de manière asynchrone. #5 :Identique au #3. #6 :Identique au #4.
Task.Run et expressions Lambda asynchrones
Bien que Task.Run démarre un nouveau thread, Task.Run(async => ...) est équivalent à Task.Factory.StartNew(async => ...), qui sera créé sur le thread pool Une nouvelle tâche et démarrez-la immédiatement.
Remarques à ignorer après le démarrage
Il est important de noter que les méthodes ignorées après le démarrage peuvent provoquer des exceptions non gérées, provoquant le crash de l'application. Il est donc important d’en considérer soigneusement l’impact avant de les utiliser.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!