Difference between OperationCanceledException and TaskCanceledException?
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".
Related videos on Youtube
Comments
-
Peter almost 2 years
What is the difference between
OperationCanceledException
andTaskCanceledException
? If I am using .NET 4.5 and using theasync
/await
keywords, which one should I be looking to catch? -
Terry over 7 yearsI 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.