2012-12-31 5 views
23

언제 async/await를 사용해야하며 C#에서 parallel.foreach를 사용해야합니까? 병렬 및 비동기/대기가 동일한 목적을 제공합니까? 그들 사이의 차이점은 무엇입니까? 약 Parallel.ForEach병렬 반면/기다리고C#에서 비동기/대기 및 병렬

+0

관련 질문보기 : http://stackoverflow.com/questions/9898441/do-the-new-c-sharp-5-0-async-and-await-keywords-use 다중 코어 –

+0

비동기 작업을 병렬로 호출하는 방법보기 https://stackoverflow.com/questions/11564506/nesting-await-in-parallel-foreach/11565531#11565531 –

답변

72

비동기 약 비동기이다. 그것들은 관련 개념이지만 동일하지는 않습니다.

Parallel.ForEach은 모든 작업이 완료 될 때까지 현재 스레드를 병렬로 처리하여 컬렉션의 모든 항목에 대해 동일한 작업을 병렬로 실행하려는 경우에 사용됩니다.

async/await는 특정 비동기 작업이 완료 될 때까지 현재 작업이 더 이상 진행되지 않을 수 있지만 현재 스레드를 차단하지 않으려는 경우에 사용됩니다. 이것은 특히 두 가지 상황에서 유용합니다 :

  • 기본적으로 다양한 비동기 작업을 차례로 수행하는 코드를 작성하고 UI 스레드에서 UI 작업에 잠시 액세스합니다. UI 스레드를 차단하고 싶지는 않지만 모든 비동기 작업을 관리하는 것은 별 어려움이 없습니다.
  • 처리 로트은 한 번에 장기 실행 작업을 수행합니다. 웹 서버에서. 각 개별 요청은 다른 웹 서비스, 데이터베이스 등을 호출하기 때문에 오랜 시간이 걸릴 수 있지만 스레드는 상대적으로 값 비싼 리소스이므로 요청 당 하나의 스레드를 갖고 싶지는 않습니다.

Parallel.ForEach을 호출 한 다음 새 작업을 시작하여 병렬 작업과 비동기 작업을 결합 할 수 있습니다. (한 예와 마찬가지로)