esparallel ()가 필요합니다.
-
20-09-2019 - |
문제
ParallelEnumerable
정적 멤버가 있습니다 AsParallel
. 내가있는 경우 IEnumerable<T>
그리고 사용하고 싶습니다 Parallel.ForEach
그것은 내가 항상 사용해야한다는 것을 의미합니까? AsParallel
?
예를 들어이 두 가지 모두가 정확합니까 (다른 모든 것이 동일합니다)?
없이 AsParallel
:
List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)), f => list.Add(f));
또는 함께 AsParallel
?
List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)).AsParallel(), f => list.Add(f));
해결책
그것은 호출되는 것에 따라 다르며, 별도의 문제입니다.
.AsParallel()
병렬화 열거 작업 대표가 아닙니다.
Parallel.ForEach
병렬화 고리, 각 요소의 작업자 스레드에 작업을 할당합니다.
따라서 소스 열거가 평행이되지 않는 한 reader.Match(file)
비싸다), 그들은 같다. 마지막 질문에 예, 둘 다도 맞습니다.
또한, 그 결과를 조금만보고 싶을 수도있는 다른 구조물이 있습니다.
GetFileList().Where(file => reader.Match(file)).ForAll(f => list.Add(f));
제휴하지 않습니다 StackOverflow