Respuestas:
OperationCanceledException
es 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.TryTake
un ejemplo.
Lo captaría por OperationCanceledException
si 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).