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