Supposons qu'un client API asynchrone soit utilisé, qui renvoie une tâche ou une tâche
static async Task DoSomething(int siteId, int postId, IBlogClient client) { await client.DeletePost(siteId, postId); // 调用API客户端 Console.WriteLine("已删除帖子 {0}.", siteId); }
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 :
public async Task DoWork() { int[] ids = new[] { 1, 2, 3, 4, 5 }; await Task.WhenAll(ids.Select(i => DoSomething(1, i, blogClient))); }
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 :
public Task DoWork() { int[] ids = new[] { 1, 2, 3, 4, 5 }; return Task.WhenAll(ids.Select(i => DoSomething(1, i, blogClient))); }
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!