Exception handling in the .NET Task Parallel Library with C#: reading task properties
October 13, 2015 Leave a comment
We saw in this and this post how to catch and handle exceptions thrown by threads. A task has properties that let you read its state and determine what happened to it.
Construct two tasks:
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); Task firstTask = Task.Factory.StartNew(() => { throw new ArgumentNullException(); }); Task secondTask = Task.Factory.StartNew(() => { cancellationTokenSource.Token.WaitHandle.WaitOne(-1); throw new OperationCanceledException(); }, cancellationTokenSource.Token);
cancellationTokenSource.Token.WaitHandle.WaitOne(-1) means that the task waits until it has been cancelled.
We cancel the second task using its cancellation token:
cancellationTokenSource.Cancel();
We wait for the tasks and ignore the exceptions for the sake of simplicity:
try { Task.WaitAll(firstTask, secondTask); } catch (AggregateException) {}
Write out a couple of properties:
Console.WriteLine("First task completed: {0}", firstTask.IsCompleted); Console.WriteLine("First task faulted: {0}", firstTask.IsFaulted); Console.WriteLine("First task cancelled: {0}", firstTask.IsCanceled); Console.WriteLine(firstTask.Exception); Console.WriteLine("Second task completed: {0}", secondTask.IsCompleted); Console.WriteLine("Second task faulted: {0}", secondTask.IsFaulted); Console.WriteLine("Second task cancelled: {0}", secondTask.IsCanceled); Console.WriteLine(secondTask.Exception);
Run the code without debugging (Ctrl+F5) so that the code execution is not interrupted at the ‘throw new ArgumentNullException’ bit. You’ll see the properties printed on the console window. What do they mean?
- IsCompleted: as the name suggests, this is ‘true’ if the task has completed
- IsFaulted: true if the task has thrown an exception, false if it has not thrown any exceptions OR it has been cancelled
- IsCancelled: true if the task has been cancelled
- Exception: read of the exception throw by the task
View the list of posts on the Task Parallel Library here.