web-dev-qa-db-fra.com

Différence entre OperationCanceledException et TaskCanceledException?

Quelle est la différence entre OperationCanceledException et TaskCanceledException? Si j'utilise .NET 4.5 et que j'utilise les mots clés async/await, lequel devrais-je chercher à attraper?

94
Peter

OperationCanceledException est simplement la classe de base pour TaskCanceledException - donc si vous attrapez le premier, vous attraperez toujours le dernier.

Certaines opérations sur les collections simultanées lancent juste OperationCanceledException, car il n'y a pas de tâches réelles impliquées (au moins jusqu'à l'API publique) est concerné). Voir BlockingCollection.TryTake pour un exemple.

J'attraperais le OperationCanceledException juste au cas où la tâche est annulée en raison d'une opération qui elle-même vient de lancer OperationCanceledException - vous voulez probablement toujours le traiter comme "juste annulation".

111
Jon Skeet