Відповіді:
OperationCanceledException
просто базовий клас для TaskCanceledException
- тому якщо ви ловите перше, ви все одно будете ловити другий.
Деякі операції над одночасними колекціями є просто такими OperationCanceledException
, оскільки ніяких реальних завдань не стосується (принаймні, що стосується публічного API). Див. BlockingCollection.TryTake
Приклад.
Я би спіймав про OperationCanceledException
всяк випадок, якщо завдання скасується через операцію, яку само кинув OperationCanceledException
- ви, мабуть, все ще хочете трактувати це як "просто скасування".
await enumerable.ForEachAsync( async () => { throw new ApplicationException( "Test" ); } );
якось, він 'змінюється' на TaskCanceledException. Будь-яка ідея, як це могло бути? Це проблема для мене, оскільки я хочу зловити "справжню" OperationCanceledException через catch (OperationCanceledException), але я не хочу, щоб це TaskCanceledException (яке дійсно повинно бути ApplicationException) спіймане.