Parallel.ForEach가 완료 될 때까지 어떻게 기다릴 수 있습니까?


122

현재 프로젝트에서 TPL을 사용하고 Parallel.Foreach를 사용하여 많은 스레드를 회전하고 있습니다. Task 클래스에는 작업이 완료 될 때까지 기다리는 Wait ()가 포함되어 있습니다. 이와 같이 Parallel.ForEach가 완료 될 때까지 기다린 다음 다음 문을 실행하려면 어떻게해야합니까?

답변:


193

특별한 작업을 할 필요가 없으며 Parallel.Foreach()모든 분기 된 작업이 완료 될 때까지 기다립니다. 호출 스레드에서 단일 동기 문으로 처리 할 수 ​​있으며 예를 들어 try / catch 안에 래핑 할 수 있습니다.


10
"Parallel.Foreach ()는 모든 분기 작업이 완료 될 때까지 대기합니다."일부 상황에서는 혼동 될 수 있습니다. (내부 비동기 작업) : Parallel.ForEach (groupedUnreadMessages, async unreadMsgCollection => {/ * works * /});
Bo HU

다음은 stackoverflow의 다른 문제입니다. stackoverflow.com/questions/11564506/…
Bo HU

4
이 답변은 async / await 이전의 2011 년입니다. 그러나 내가 말했듯이 ForEach 내부에서 스레드를 생성하는 것은 좋은 생각이 아닙니다. 비동기 작업도 아닙니다. 게시 한 링크는 좋은 정보와 솔루션을 제공합니다.
Henk Holterman

1
"ForEach 내부에서 스레드를 생성하는 것은 좋은 생각이 아닙니다."확장 할 수 있습니까? "돌아 가기 전에 반드시 기다리지 않는 한"입니까?
Gianthra

16

Parallel.Foreach에서는 필요하지 않습니다. 사용 가능한 프로세서 수만큼의 스레드에서만 foreach를 실행하지만 동 기적으로 반환합니다.

자세한 정보는 여기 에서 찾을 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.