Maison >développement back-end >C++ >Comment puis-je utiliser efficacement Async/Await pour plusieurs tâches parallèles en C# ?
Supposons qu'un client API asynchrone soit utilisé, qui renvoie une tâche ou une tâche
<code class="language-csharp">static async Task DoSomething(int siteId, int postId, IBlogClient client) { await client.DeletePost(siteId, postId); // 调用API客户端 Console.WriteLine("已删除帖子 {0}.", siteId); }</code>
Le but est de démarrer plusieurs tâches asynchrones simultanément et d'attendre qu'elles se terminent. Deux méthodes couramment utilisées sont Parallel.ForEach et Task.WaitAll.
Bien que Parallel.ForEach et Task.WaitAll tentent tous deux d'exécuter des tâches en parallèle, ils ont des limites.
Pour surmonter ces limitations, nous vous recommandons d'utiliser Task.WhenAll, qui peut exécuter des tâches de manière asynchrone et en parallèle. Le code suivant démontre son utilisation :
<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>
Dans ce cas, puisqu'il n'y a pas d'opérations de suivi une fois la tâche terminée, wait n'est pas nécessaire. Le code simplifié suivant suffira :
<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>
Pour plus d'informations et de comparaisons de ces approches, consultez l'article de blog complet : "Comment et où utiliser l'API Web ASP.NET pour les E/S asynchrones simultanées".
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!