문제

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));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top