Risposte:
OperationCanceledException
è semplicemente la classe base per TaskCanceledException
- quindi se prendi la prima, continuerai a catturare la seconda.
Alcune operazioni su raccolte simultanee vengono generate semplicemente OperationCanceledException
, poiché non sono coinvolte attività effettive (almeno per quanto riguarda l'API pubblica). Vedi BlockingCollection.TryTake
per un esempio.
Vorrei prendere il OperationCanceledException
solo nel caso in cui l'attività venga annullata a causa di un'operazione che si è appena lanciata OperationCanceledException
- probabilmente vuoi ancora trattarla come "solo annullamento".
await enumerable.ForEachAsync( async () => { throw new ApplicationException( "Test" ); } );
qualche modo, viene "modificata" in TaskCanceledException. Qualche idea di come potrebbe essere? Questo è un problema per me in quanto voglio catturare un'eccezione OperationCanceledException 'vera' tramite catch (OperationCanceledException) ma non voglio che questa TaskCanceledException (che dovrebbe essere davvero ApplicationException) catturata.