2013-05-05 5 views
1

두 작업이 완료 될 때까지 기다리고 싶지만 완료된 상태가 아닙니다. 대기 시간은 일 때 모두 취소 상태 여야합니다.작업 취소

cancellationToken을 활성화 한 후 taskA와 taskB를 취소 할 때이 줄을 계속 표시합니까?

Task.WaitAll(taskA, taskB); 

미리 감사드립니다.

답변

4

예, 두 작업이 모두 터미널 상태 인 경우 WaitAll이 종료됩니다 (터미널 상태가 무엇이든).

그러나 작업이 잘못되거나 취소 된 경우 AggregateException을 던집니다. 모든 작업이 성공적으로 완료된 경우에만 은 보통 (예외없이) 만 완료됩니다. 계속 그냥 가고 싶다면 그 예외를 잡아야합니다. AggregateExceptionInnerExceptions을 보면 취소와 오류의 차이를 알 수 있습니다. 물론 taskAtaskB을 직접 볼 수도 있습니다. 예외 부분에 documentation에서

: 예외가 작업 인스턴스 중 하나 이상을 실행하는 동안 발생했습니다 - 또는

AggregateException 작업 인스턴스의 하나 이상이 취소되었습니다. 타스크가 취소 된 경우 AggregateException에는 InnerExceptions 콜렉션에 OperationCanceledException이 포함됩니다. 원래 작업이 완료되면 완료 작업을 반환 - 당신이 .NET 4.5 및 비동기 방식을 사용하는 경우,이 비동기 적으로 대기가 수행하는 대신 Task.WhenAll을 사용할 수 있다는

참고.