Antworten:
OperationCanceledException
ist einfach die Basisklasse für TaskCanceledException
- wenn Sie also die erstere fangen, werden Sie immer noch die letztere fangen.
Einige Vorgänge für gleichzeitige Sammlungen werden nur ausgelöst OperationCanceledException
, da keine tatsächlichen Aufgaben erforderlich sind (zumindest was die öffentliche API betrifft). Siehe BlockingCollection.TryTake
für ein Beispiel.
Ich würde das OperationCanceledException
nur für den Fall fangen, dass die Aufgabe aufgrund einer Operation abgebrochen wird, die selbst gerade geworfen wurde OperationCanceledException
- Sie möchten das wahrscheinlich immer noch als "nur Abbrechen" behandeln.
await enumerable.ForEachAsync( async () => { throw new ApplicationException( "Test" ); } );
in eine Art auslöse, wird sie in eine TaskCanceledException 'geändert'. Irgendeine Idee, wie das sein könnte? Dies ist ein Problem für mich, da ich eine 'echte' OperationCanceledException über catch (OperationCanceledException) abfangen möchte, aber ich möchte nicht, dass diese TaskCanceledException (die eigentlich ApplicationException sein sollte) abgefangen wird.