Respuestas:
OperationCanceledExceptiones simplemente la clase base para TaskCanceledException, por lo que si detecta la primera, aún obtendrá la última.
Algunas operaciones en colecciones concurrentes arrojan solo OperationCanceledException, ya que no hay tareas reales involucradas (al menos en lo que respecta a la API pública). Vea BlockingCollection.TryTakeun ejemplo.
Lo captaría por OperationCanceledExceptionsi acaso la tarea se cancela debido a una operación que acaba de lanzarse OperationCanceledException; probablemente aún quiera tratar eso como "solo cancelación".
await enumerable.ForEachAsync( async () => { throw new ApplicationException( "Test" ); } );alguna manera, se 'cambia' a una TaskCanceledException. ¿Alguna idea de cómo podría ser eso? Este es un problema para mí, ya que quiero capturar una OperationCanceledException 'verdadera' a través de catch (OperationCanceledException) pero no quiero que se capture esta TaskCanceledException (que realmente debería ser ApplicationException).