web-dev-qa-db-ja.com

OperationCanceledExceptionとTaskCanceledExceptionの違いは?

OperationCanceledExceptionTaskCanceledExceptionの違いは何ですか? .NET 4.5を使用しており、async/awaitキーワードを使用している場合、どちらをキャッチする必要がありますか?

94
Peter

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

実際のタスクが関与していないため、同時コレクションの一部の操作はOperationCanceledExceptionのみをスローします(少なくともパブリックAPI懸念される)。見る - BlockingCollection.TryTake 例。

OperationCanceledExceptionを投げただけの操作が原因でタスクがキャンセルされた場合に備えて、OperationCanceledExceptionをキャッチします。おそらく「キャンセルのみ」として扱いたいと思うでしょう。

111
Jon Skeet