Respostas:
OperationCanceledException
é simplesmente a classe base para TaskCanceledException
- portanto, se você pegar a primeira, ainda assim conseguirá a última.
Algumas operações em coleções concorrentes lançam apenas OperationCanceledException
, visto que não há nenhuma tarefa real envolvida (pelo menos no que diz respeito à API pública). Veja BlockingCollection.TryTake
por exemplo.
Eu pegaria o OperationCanceledException
caso a tarefa seja cancelada devido a uma operação que acabou de ser executada OperationCanceledException
- você provavelmente ainda quer tratar isso como "apenas cancelamento".
await enumerable.ForEachAsync( async () => { throw new ApplicationException( "Test" ); } );
alguma forma, ela é 'alterada' para uma TaskCanceledException. Alguma ideia de como isso pode ser? Isso é um problema para mim, pois quero capturar uma OperationCanceledException 'verdadeira' por meio de captura (OperationCanceledException), mas não quero que essa TaskCanceledException (que realmente deveria ser ApplicationException) seja capturada.