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.TryTakeper un esempio.
Vorrei prendere il OperationCanceledExceptionsolo 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.