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
Utilisez Parallel.ForEach
et .Wait()
:
<code class="language-csharp"> Parallel.ForEach(ids, i => DoSomething(1, i, blogClient).Wait());</code>
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.
Utiliser Task.WaitAll
:
<code class="language-csharp"> Task.WaitAll(ids.Select(i => DoSomething(1, i, blogClient)).ToArray());</code>
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>
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>
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!