Question

ParallelEnumerable a une AsParallel membre statique. Si j'ai un IEnumerable<T> et que vous souhaitez utiliser Parallel.ForEach que cela implique que je serais toujours utiliserai AsParallel?

par exemple. Est-ce que ces deux correct (tout le reste étant égales par ailleurs)?

sans AsParallel:

List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)), f => list.Add(f));

ou AsParallel?

List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)).AsParallel(), f => list.Add(f));
Était-ce utile?

La solution

Cela dépend de ce qui est appelé, ils sont des questions distinctes.

.AsParallel() parallélise énumération pas la délégation des tâches.

Parallel.ForEach parallélisé boucle , l'attribution des tâches aux threads de travail pour chaque élément.

Alors à moins que vos gains d'énumération source de devenir parallèle (par exemple reader.Match(file) est cher), ils sont égaux. Pour votre dernière question, Oui , les deux sont également correctes.

En outre, il y a une autre construction, vous voudrez peut-être regarder ce qu'il raccourcit un peu, obtenir encore profiter au maximum de PLINQ:

GetFileList().Where(file => reader.Match(file)).ForAll(f => list.Add(f));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top