2012-03-06 2 views
7

으로 처리작업 구성과 오류가 나는 다음과 같은 구조의 방법이 TPL

  • secondTask 그렇게
  • 결정할 때까지 InitializeAsync에 의해 반환되는 작업은 완료된 것으로 간주되지 않는다
  • secondTaskfirstTask이 성공한 경우에만 실행
  • firstTask 또는 secondTask으로 인해 전체 작업이 실패합니다.

동일한 기능을 구현하는 동시에 더 명확하고 단순한 방법이 있는지 궁금합니다. 나는 .NET 4.0을 사용하고 있지만, 4.5가 이것을 더 쉽게 만들 것인지에 관심이있다.

+1

4.5에서 aswait/async 기능을 사용하여이 작업을 수행 할 수 있으며 async-function 내에서 작업을 함께 꽂아서 시도/catch 할 수 있습니다. – Carsten

+0

스티븐이 블로그 게시물을 찾을 때까지 최근에 같은 문제가 있었으며 같은 경로로 이동했습니다. 기드온의 답변이 연결되어있는 것 같아요. 그것은 솔루션에서의 나의 초기 시도보다 훨씬 깨끗하고 더 명백하게 모든 코너 케이스를 처리합니다. – shambulator

답변

5

, 나는 체인 작업에 this blog article에서 아이디어를 사용했다. 특히, 섹션을보고을보십시오. 그의 버전은 Then 체인을 할 수 있도록 SelectMany 당신이 필요로 당신은 아주 가까이 도착, 당신은 작업을 반환하는 함수를 전달하는 대신 단지 같은 당신이하고자하는 방법에 옆으로 ContinueWith

을 통과 할 것으로 예상하지 않는 것이 LINQ from 절을 통한 작업. 비동기/.NET 4.5에서 기다릴 때까지 구문 옵션으로 주로 언급하지만, 실제로는 사용하지 않습니다.

+0

이것은 'TaskCompletionSource'가 확실히 구현하기에 충분할 정도로 분명하지만 BCL에는없는 놀랍고 깨끗한 일반 솔루션입니다. 'ContinueWith'와 같은 서명을 원하면 취소 토큰, 스케줄러 등을 지정하는 오버로드를 제공해야합니다. – shambulator

+1

이것은 필자에게 필 요한 필자의 이해를 돕는 정확한 구멍이었습니다. 매우 감사합니다. –

0

또 다른 옵션은 (당신이 돌아 부모 작업 내에 중첩) 부착 자식 작업

윌 부착 자식 작업까지 완료되지 완료 부모 작업을하여 두 가지 작업을 생성하는 것입니다. 하위 오류는 상위 오류로 간주됩니다. 당신이 설명처럼 .NET 4.0

http://msdn.microsoft.com/en-us/library/dd997417.aspx

관련 문제