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# ?

Quel est l'impact des différents modèles Async/Await sur le temps d'exécution en C# ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-12 13:28:42397parcourir

How Do Different Async/Await Patterns Impact Execution Time in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn