В чем разница между OperationCanceledException и TaskCanceledException? Если я использую .NET 4.5 и использую ключевые слова async/await, на что я должен быть пойман?
Разница между OperationCanceledException и TaskCanceledException?
Ответ 1
OperationCanceledException является просто базовым классом для TaskCanceledException - так что если вы поймаете первое, вы все равно поймаете последнего.
Некоторые операции с параллельными коллекциями генерируют только OperationCanceledException, так как нет никаких реальных задач (по крайней мере, в отношении публичного API). См. BlockingCollection.TryTake для примера.
Я бы поймал OperationCanceledException на всякий случай, если задача отменена из-за операции, которая сама просто бросила OperationCanceledException - вы, вероятно, все еще хотите рассматривать это как "просто отмену".