OperationCanceledException과 TaskCanceledException의 차이점은 무엇입니까?


101

OperationCanceledException과 의 차이점은 무엇입니까 TaskCanceledException? .NET 4.5를 사용하고 async/ await키워드를 사용하는 경우 어떤 키워드를 찾아야합니까?

답변:


117

OperationCanceledException는 단순히 기본 클래스입니다 TaskCanceledException. 따라서 전자를 잡더라도 후자를 잡을 것입니다.

동시 컬렉션에 대한 일부 작업은 관련된 OperationCanceledException실제 작업 이 없기 때문에 (적어도 공개 API에 관한 한). BlockingCollection.TryTake예를 참조하십시오 .

OperationCanceledException작업 자체가 방금 던진 작업으로 인해 작업이 취소되는 경우를 대비하여 잡을 수 있습니다.이 작업 OperationCanceledException을 "단지 취소"로 취급하고 싶을 것입니다.


1
나는 주로 Stephen Toub의 블로그 blogs.msdn.microsoft.com/pfxteam/2012/03/05/… 에서 ForEachAsync를 생각해 냈습니다 . 그런 다음 await enumerable.ForEachAsync( async () => { throw new ApplicationException( "Test" ); } );어떻게 든 내부에서 예외를 throw하면 TaskCanceledException으로 '변경'됩니다. 그게 어떻게 될지 아세요? 이것은 catch (OperationCanceledException)를 통해 'true'OperationCanceledException을 포착하고 싶지만이 TaskCanceledException (실제로 ApplicationException이어야 함)을 포착하고 싶지 않기 때문에 문제입니다.
Terry
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.