2012-10-23 13 views

答えて

75

OperationCanceledExceptionは、単にTaskCanceledExceptionの基本クラスです。前者をキャッチしても、後者はまだキャッチします。

並行収集に関する一部の操作では、実際にはというタスクが含まれていないため(少なくとも公開APIに関する限り)、ちょうどOperationCanceledExceptionがスローされます。例については、BlockingCollection.TryTakeを参照してください。

私はOperationCanceledExceptionを捕まえるでしょう。それは、それ自体が単にOperationCanceledExceptionを投げた操作のためにタスクがキャンセルされた場合です。あなたはおそらくそれを "ただの取り消し"として扱いたいと思うかもしれません。

+1

ほとんどの場合、ForEachAsyncはStephen Toubのブログhttps://blogs.msdn.microsoft.com/pfxteam/2012/03/05/implementing-a-simple-foreachasync-part-2/から提供されました。それから、 'await enumerable.ForEachAsync(async()=> {throw new ApplicationException(" Test ");});の内部で例外をスローすると、何とか '変更'されてTaskCanceledExceptionになります。それはどういう考えですか?これはcatch(OperationCanceledException)を介して 'true'のOperationCanceledExceptionをキャッチしたいのですが、このTaskCanceledException(本当にApplicationExceptionになるはずです)がキャッチされることは嫌です。 – Terry

関連する問題