2017-05-10 1 views
-1

C#의 동시성에 대한 질문이 있습니다. 최근에 나는를 사용하는 유틸리티 기능을 추가 할 필요가비동기 작업과 하나의 유틸리티 기능을 병렬로 실행하십시오.

var aresult = A.Result; 
var bresult = B.Result; 
var cResult = C.Result; 

: 나는 3 작업 A, B, C가 있고 나는 그들의이 같은 결과를 사용하여 다음 병렬로 실행

task.WhenAll(A,B,C)을 기다리고 사용하고 있어요 cResults이 같은 값을 반환 : 나는 작업 A와 B가 작업 C보다 훨씬 더 오래 걸리지 만이 knoweldege이 프로세스를 최적화 할 수 싶습니다 (작업이

var sortedResult = SortResult(cResult); 

(이 기능은 비동기 방법이 아닙니다) A와 B)와 (C와 sortedResults (cResults))는 병렬로 실행됩니다 l 그래서 A와 B가 C와 sortedResults (cResult)를 처리하는데 더 오래 걸리는 동일한 시간을 사용합니다. 어떻게해야합니까?

긴 게시물에 대한 죄송합니다

내가 어떤 도움을 주셔서 감사합니다.

답변

1

await task.WhenAll(A,B,C)은 병렬로 작업을 실행합니다. 그것은 무엇을합니까?은 이미 3 작업을 실행하고 모두 완료되면 메서드가 계속 실행되도록합니다. 이미는 (아마도 몇 가지 비동기 메서드를 호출하여) 단지 A, BC을 작성하여 병렬로 작업을 실행하기 시작했다.

원하는 의미론이 A B와 C를 시작한 다음 C가 완료되면 무언가를 수행 한 다음 A와 B가 완료되면 다른 작업을 수행 한 다음 각각의 작업을 작성하면됩니다. A, B, C는, 3 개 비동기 메소드를 호출 C이 완료된 후 일을하는 것만 큼 쉽습니다 시작하면 C를 기다리고, 그리고 이후에 일을하고 B 마무리는 A와 B를 기다리고 (또는 Task.WhenAll를 사용하는 것만 큼 쉽습니다만큼 쉽다 두 가지 작업을 제공하면 동일한 효과를 얻을 수 있습니다).

+0

는 내가 원하는 작업 A는, B가 작업 C와 sortResult (cResult) –

+0

@pojroj 그리고 나는 그 작업을 수행 할 기술 된 순서와 병렬로 실행하는 것입니다. – Servy

관련 문제