Difference between OperationCanceledException and TaskCanceledException?

15,584

OperationCanceledException is simply the base class for TaskCanceledException - so if you catch the former, you'll still catch the latter.

Some operations on concurrent collections throw just OperationCanceledException, as there aren't any actual tasks involved (at least as far as the public API is concerned). See BlockingCollection.TryTake for an example.

I would catch the OperationCanceledException just in case the task is cancelled due to an operation which itself just threw OperationCanceledException - you probably still want to treat that as "just cancellation".

Share:
15,584

Related videos on Youtube

Peter
Author by

Peter

:)

Updated on June 02, 2022

Comments

  • Peter
    Peter almost 2 years

    What is the difference between OperationCanceledException and TaskCanceledException? If I am using .NET 4.5 and using the async/await keywords, which one should I be looking to catch?

  • Terry
    Terry over 7 years
    I came up with a ForEachAsync mostly from Stephen Toub's blog blogs.msdn.microsoft.com/pfxteam/2012/03/05/… . Then if I throw an exception inside an await enumerable.ForEachAsync( async () => { throw new ApplicationException( "Test" ); } ); somehow it is 'changed' to a TaskCanceledException. Any idea how that might be? This is problem for me as I want to catch a 'true' OperationCanceledException via catch ( OperationCanceledException ) but I don't want this TaskCanceledException (which should really be ApplicationException) caught.