Я использую библиотеку параллельных задач для запуска задачи, которая при отмене создает исключение OperationCanceledException, которое затем перехватывается с помощью AggregateException следующим образом. AggregateException содержит список TaskCanceledExceptions, соответствующих выброшенным исключениям. К сожалению, эти TaskCanceledExceptions, похоже, теряют трассировку стека, созданную исходными исключениями. Это по дизайну?
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: