AggregateException
Class
Definition
Represents one or more errors that occur during application execution.
public class AggregateException : Exception
- Inheritance
Inherited Members
System.Exception
System.Object
Examples
The following example catches the AggregateException exception and calls the Handle method to handle each exception it contains. Compiling and running the example with the first task1 variable should result in an AggregateException object that contains an UnauthorizedAccessException exception. Commenting out that line, uncommenting the second task1 variable, and compiling and running the example produces an AggregateException object that contains an IndexOutOfRangeException exception.
using System;
using System.IO;
using System.Threading.Tasks;
class Example
{
static void Main(string[] args)
{
// Get a folder path whose directories should throw an UnauthorizedAccessException.
string path = Directory.GetParent(
Environment.GetFolderPath(
Environment.SpecialFolder.UserProfile)).FullName;
// Use this line to throw UnauthorizedAccessException, which we handle.
Task<string[]> task1 = Task<string[]>.Factory.StartNew(() => GetAllFiles(path));
// Use this line to throw an exception that is not handled.
// Task task1 = Task.Factory.StartNew(() => { throw new IndexOutOfRangeException(); } );
try {
task1.Wait();
}
catch (AggregateException ae) {
ae.Handle((x) =>
{
if (x is UnauthorizedAccessException) // This we know how to handle.
{
Console.WriteLine("You do not have permission to access all folders in this path.");
Console.WriteLine("See your network administrator or try another path.");
return true;
}
return false; // Let anything else stop the application.
});
}
Console.WriteLine("task1 Status: {0}{1}", task1.IsCompleted ? "Completed," : "",
task1.Status);
}
static string[] GetAllFiles(string str)
{
// Should throw an UnauthorizedAccessException exception.
return System.IO.Directory.GetFiles(str, "*.txt", System.IO.SearchOption.AllDirectories);
}
}
// The example displays the following output if the file access task is run:
// You do not have permission to access all folders in this path.
// See your network administrator or try another path.
// task1 Status: Completed,Faulted
// It displays the following output if the second task is run:
// Unhandled Exception: System.AggregateException: One or more errors occurred. ---
// > System.IndexOutOfRangeException: Index was outside the bounds of the array.
// at Example.<Main>b__0()
// at System.Threading.Tasks.Task.Execute()
// --- End of inner exception stack trace ---
// at System.AggregateException.Handle(Func`2 predicate)
// at Example.Main(String[] args)
Imports System.IO
Imports System.Threading.Tasks
Module Example
Sub Main()
' Get a folder path whose directories should throw an UnauthorizedAccessException.
Dim path As String = Directory.GetParent(
Environment.GetFolderPath(
Environment.SpecialFolder.UserProfile)).FullName
' Use this line to throw UnauthorizedAccessException, which we handle.
Dim task1 = Task(Of String()).Factory.StartNew(Function() GetAllFiles(path))
' Use this line to throw an exception that is not handled.
' Task task1 = Task.Factory.StartNew(Sub() Throw New IndexOutOfRangeException() )
Try
task1.Wait()
Catch ae As AggregateException
ae.Handle(Function(x)
If TypeOf (x) Is UnauthorizedAccessException Then ' This we know how to handle
Console.WriteLine("You do not have permission to access all folders in this path.")
Console.WriteLine("See your network administrator or try another path.")
Return True
Else
Return False ' Let anything else stop the application.
End If
End Function)
End Try
Console.WriteLine("task1 Status: {0}{1}", If(task1.IsCompleted, "Completed,", ""),
task1.Status)
End Sub
Function GetAllFiles(ByVal str As String) As String()
' Should throw an UnauthorizedAccessException exception.
Return System.IO.Directory.GetFiles(str, "*.txt", System.IO.SearchOption.AllDirectories)
End Function
End Module
Remarks
AggregateException is used to consolidate multiple failures into a single, throwable exception object. It is used extensively in the Task Parallel Library (TPL) and Parallel LINQ (PLINQ). For additional information, see the Aggregating Exceptions entry in the .NET Matters blog. For an example, see NIB: How to: Handle Exceptions Thrown by Tasks and How to: Handle Exceptions in a PLINQ Query.
Constructors
| AggregateException() |
Initializes a new instance of the AggregateException class with a system-supplied message that describes the error. |
| AggregateException(IEnumerable<Exception>) |
Initializes a new instance of the AggregateException class with references to the inner exceptions that are the cause of this exception. |
| AggregateException(Exception[]) |
Initializes a new instance of the AggregateException class with references to the inner exceptions that are the cause of this exception. |
| AggregateException(String) |
Initializes a new instance of the AggregateException class with a specified message that describes the error. |
| AggregateException(SerializationInfo, StreamingContext) |
Initializes a new instance of the AggregateException class with serialized data. |
| AggregateException(String, IEnumerable<Exception>) |
Initializes a new instance of the AggregateException class with a specified error message and references to the inner exceptions that are the cause of this exception. |
| AggregateException(String, Exception) |
Initializes a new instance of the AggregateException class with a specified error message and a reference to the inner exception that is the cause of this exception. |
| AggregateException(String, Exception[]) |
Initializes a new instance of the AggregateException class with a specified error message and references to the inner exceptions that are the cause of this exception. |
Properties
| InnerExceptions |
Gets a read-only collection of the Exception instances that caused the current exception. |
| Message | |
Methods
| Flatten() |
Flattens an AggregateException instances into a single, new instance. |
| GetBaseException() |
Returns the AggregateException that is the root cause of this exception. |
| GetObjectData(SerializationInfo, StreamingContext) |
Initializes a new instance of the AggregateException class with serialized data. |
| Handle(Func<Exception,Boolean>) |
Invokes a handler on each Exception contained by this AggregateException. |
| ToString() |
Creates and returns a string representation of the current AggregateException. |
Thread Safety
All public and protected members of AggregateException are thread-safe and may be used concurrently from multiple threads.