Maison > développement back-end > C++ > Quel est le moyen le plus efficace de gérer plusieurs tâches asynchrones en C# ?

Quel est le moyen le plus efficace de gérer plusieurs tâches asynchrones en C# ?

DDD
Libérer: 2025-01-22 03:31:15
original
238 Les gens l'ont consulté

What's the Most Efficient Way to Handle Multiple Async Tasks in C#?

Gérer efficacement plusieurs tâches asynchrones en C#

Lorsqu'il s'agit de clients API asynchrones, il est crucial de déterminer le moyen le plus efficace de lancer plusieurs tâches et de synchroniser leur exécution. Cet article explorera deux techniques courantes et présentera une alternative recommandée pour des performances maximales.

Méthodes courantes

  1. Utilisez Parallel.ForEach et .Wait() :

    <code class="language-csharp"> Parallel.ForEach(ids, i => DoSomething(1, i, blogClient).Wait());</code>
    Copier après la connexion

    Cette approche exécute les opérations en parallèle mais bloque le thread de chaque tâche jusqu'à ce qu'elle soit terminée. Par conséquent, si un appel réseau prend beaucoup de temps, le thread restera inactif.

  2. Utiliser Task.WaitAll :

    <code class="language-csharp"> Task.WaitAll(ids.Select(i => DoSomething(1, i, blogClient)).ToArray());</code>
    Copier après la connexion

    Ce code attend que toutes les tâches soient terminées, bloquant le thread en cours jusqu'à ce que toutes les opérations soient terminées.

Méthode recommandée

Pour une exécution asynchrone optimale, il est recommandé d'utiliser Task.WhenAll :

<code class="language-csharp">public async Task DoWork() {
    int[] ids = new[] { 1, 2, 3, 4, 5 };
    await Task.WhenAll(ids.Select(i => DoSomething(1, i, blogClient)));
}</code>
Copier après la connexion

Cette méthode démarre les tâches en parallèle et permet au thread actuel de continuer à exécuter d'autres tâches en attendant qu'elles se terminent. Cela optimise l'utilisation du processeur et maintient la réactivité.

Pour un maximum de simplicité de code, sans attendre, le code suivant suffit :

<code class="language-csharp">public Task DoWork() {
    int[] ids = new[] { 1, 2, 3, 4, 5 };
    return Task.WhenAll(ids.Select(i => DoSomething(1, i, blogClient)));
}</code>
Copier après la connexion

En utilisant Task.WhenAll, vous pouvez exécuter efficacement plusieurs opérations asynchrones en parallèle sans sacrifier l'efficacité des threads ou la réactivité du système.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal