Réponses:
OperationCanceledException
est simplement la classe de base pour TaskCanceledException
- donc si vous attrapez la première, vous attraperez toujours la seconde.
Certaines opérations sur des collectes simultanées sont lancées simplement OperationCanceledException
, car il n'y a pas de tâches réelles impliquées (du moins en ce qui concerne l'API publique). Voir BlockingCollection.TryTake
pour un exemple.
J'attraperais le OperationCanceledException
juste au cas où la tâche serait annulée en raison d'une opération qui vient d'être lancée OperationCanceledException
- vous voudrez probablement toujours traiter cela comme une "annulation juste".
await enumerable.ForEachAsync( async () => { throw new ApplicationException( "Test" ); } );
elle est «changée» en TaskCanceledException. Une idée de comment cela pourrait être? C'est un problème pour moi car je veux attraper une 'vraie' OperationCanceledException via catch (OperationCanceledException) mais je ne veux pas que cette TaskCanceledException (qui devrait vraiment être ApplicationException) soit interceptée.