回答:
OperationCanceledException
は単にの基本クラスTaskCanceledException
です。前者をキャッチした場合でも、後者をキャッチします。
(少なくともパブリックAPIに関する限り)OperationCanceledException
実際のタスクが含まれていないため、並行コレクションに対する一部の操作はをスローします。BlockingCollection.TryTake
例については、を参照してください。
OperationCanceledException
それ自体がスローした操作によってタスクがキャンセルされた場合に備えて、私はそれをキャッチしOperationCanceledException
ます。おそらく、それを「キャンセル」として扱いたいと思うでしょう。
await enumerable.ForEachAsync( async () => { throw new ApplicationException( "Test" ); } );
何らかの方法で例外をスローすると、TaskCanceledExceptionに「変更」されます。それがどのようになり得るか考えていますか?キャッチ(OperationCanceledException)を介して「true」のOperationCanceledExceptionをキャッチしたいのですが、このTaskCanceledException(実際にはApplicationExceptionであるはずです)をキャッチしたくないので、これは私にとって問題です。