답변:
OperationCanceledException
는 단순히 기본 클래스입니다 TaskCanceledException
. 따라서 전자를 잡더라도 후자를 잡을 것입니다.
동시 컬렉션에 대한 일부 작업은 관련된 OperationCanceledException
실제 작업 이 없기 때문에 (적어도 공개 API에 관한 한). BlockingCollection.TryTake
예를 참조하십시오 .
OperationCanceledException
작업 자체가 방금 던진 작업으로 인해 작업이 취소되는 경우를 대비하여 잡을 수 있습니다.이 작업 OperationCanceledException
을 "단지 취소"로 취급하고 싶을 것입니다.
await enumerable.ForEachAsync( async () => { throw new ApplicationException( "Test" ); } );
어떻게 든 내부에서 예외를 throw하면 TaskCanceledException으로 '변경'됩니다. 그게 어떻게 될지 아세요? 이것은 catch (OperationCanceledException)를 통해 'true'OperationCanceledException을 포착하고 싶지만이 TaskCanceledException (실제로 ApplicationException이어야 함)을 포착하고 싶지 않기 때문에 문제입니다.