Разница между OperationCanceledException и TaskCanceledException?

В чем разница между OperationCanceledException и TaskCanceledException? Если я использую .NET 4.5 и использую ключевые слова async/await, на что я должен быть пойман?

Ответ 1

OperationCanceledException является просто базовым классом для TaskCanceledException - так что если вы поймаете первое, вы все равно поймаете последнего.

Некоторые операции с параллельными коллекциями генерируют только OperationCanceledException, так как нет никаких реальных задач (по крайней мере, в отношении публичного API). См. BlockingCollection.TryTake для примера.

Я бы поймал OperationCanceledException на всякий случай, если задача отменена из-за операции, которая сама просто бросила OperationCanceledException - вы, вероятно, все еще хотите рассматривать это как "просто отмену".