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.