Utiliser le parallèle lambda asynchrone parallèle
Une méthode de collecte de traitement parallèle consiste à utiliser la méthode
avec l'expression de lambda. Cependant, si vous souhaitez appeler la méthode asynchrone dans l'expression de Lambda, vous rencontrerez quelques problèmes.
Parallel.ForEach
Le problème est que les threads créés ne sont que des threads d'arrière-plan, et cette méthode n'attendra pas leur achèvement. Vous pouvez le voir dans l'exemple suivant:
Parallel.ForEach
Le problème est que sera 0, car l'appel de
var bag = new ConcurrentBag<object>(); Parallel.ForEach(myCollection, async item => { // 预处理 var response = await GetData(item); bag.Add(response); // 后处理 }); var count = bag.Count;
count
Cette méthode est efficace, mais elle désactive les avantages de Parallel.ForEach
et vous oblige à effectuer un traitement anormal manuel. async
var bag = new ConcurrentBag<object>(); Parallel.ForEach(myCollection, item => { // 预处理 var responseTask = GetData(item); // 注意这里去掉了await responseTask.Wait(); var response = responseTask.Result; bag.Add(response); // 后处理 }); var count = bag.Count;
await
Il existe deux façons d'atteindre l'utilisation de
Cycle: <.> 1. Simple et parallélisation
await
Cette méthode est très simple, seules quelques lignes de code sont nécessaires: Parallel.ForEach
<.> 2. Complexe et parallélisation
Cette méthode est plus compliquée, mais elle peut mieux contrôler le processus de parallélisation. Pour plus de détails, veuillez consulter l'article ForEachasync de Stephen Toub.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!