작업 병렬 라이브러리를 사용하여 - 취소 될 때 OperationCanceledException을 throw하고 다음과 같이 AggregateException을 사용하여 catch합니다. AggregateException에는 Throw 된 예외에 해당하는 TaskCanceledExceptions 목록이 포함되어 있습니다. 불행히도 이러한 TaskCanceledExceptions는 원래 예외가 던져 놓은 스택 추적을 잃어 버리는 것 같습니다. 디자인에 의한 것인가?AggregateException에 TaskCanceledException에 스택 추적이 포함되어 있지 않습니다.
try
{
task1.Wait();
}
catch (AggregateException aggEx)
{
var tcex = ex as TaskCanceledException;
if (tcex != null)
{
Debug.WriteLine("InnerException:{0}, Message:{1}, Source:{2}, StackTrace: {3}",
tcex.InnerException, tcex.Message, tcex.Source, tcex.StackTrace);
return true;
}
else
{
return false;
}
}
는 결과 :
InnerException:, Message:A task was canceled., Source:, StackTrace:
게시 한 결과를 반영하도록 코드를 업데이트하십시오! :) –
"if (tcex! = null)"행이 맞습니까? "if (tcex == null)"이어야합니다. –
@MatthewWatson -이 경우 'if'는 다른 예외를 필터링합니다. –