AggregateException Classe

Definição

Representa um ou mais erros que ocorrem durante a execução do aplicativo.Represents one or more errors that occur during application execution.

public ref class AggregateException : Exception
[System.Serializable]
public class AggregateException : Exception
type AggregateException = class
    inherit Exception
Public Class AggregateException
Inherits Exception
Herança
AggregateException
Atributos

Exemplos

O exemplo a seguir captura a AggregateException exceção e chama o Handle método para manipular cada exceção que ela contém.The following example catches the AggregateException exception and calls the Handle method to handle each exception it contains. Compilar e executar o exemplo com a primeira task1 variável deve resultar em um AggregateException objeto que contém uma UnauthorizedAccessException exceção.Compiling and running the example with the first task1 variable should result in an AggregateException object that contains an UnauthorizedAccessException exception. Comentar essa linha, remover a marca de comentário da segunda task1 variável e compilar e executar o exemplo produz um AggregateException objeto que contém uma IndexOutOfRangeException exceção.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 async Task 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
      {
          await task1;
      }
      catch (UnauthorizedAccessException ae)
      { 
          Console.WriteLine("Caught unauthorized access exception-await behavior");
      }
      catch (AggregateException ae)
      {
          Console.WriteLine("Caught aggregate exception-Task.Wait behavior");
          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

Comentários

AggregateExceptioné usado para consolidar várias falhas em um único objeto de exceção rethrowável.AggregateException is used to consolidate multiple failures into a single, throwable exception object. Ele é usado extensivamente na TPL (biblioteca paralela de tarefas) e no Parallel LINQ (PLINQ).It is used extensively in the Task Parallel Library (TPL) and Parallel LINQ (PLINQ). Para saber mais, veja Tratamento de exceções e Como tratar exceções em uma consulta PLINQ.For more information, see Exception Handling and How to: Handle Exceptions in a PLINQ Query. Para obter informações adicionais, consulte a entrada de exceções de agregação no blog de assuntos .net.For additional information, see the Aggregating Exceptions entry in the .NET Matters blog.

Construtores

AggregateException()

Inicializa uma nova instância da classe AggregateException com uma mensagem fornecida pelo sistema que descreve o erro.Initializes a new instance of the AggregateException class with a system-supplied message that describes the error.

AggregateException(Exception[])

Inicializa uma nova instância da classe AggregateException com referências às exceções internas que são a causa dessa exceção.Initializes a new instance of the AggregateException class with references to the inner exceptions that are the cause of this exception.

AggregateException(IEnumerable<Exception>)

Inicializa uma nova instância da classe AggregateException com referências às exceções internas que são a causa dessa exceção.Initializes a new instance of the AggregateException class with references to the inner exceptions that are the cause of this exception.

AggregateException(SerializationInfo, StreamingContext)

Inicializa uma nova instância da classe AggregateException com dados serializados.Initializes a new instance of the AggregateException class with serialized data.

AggregateException(String)

Inicializa uma nova instância da classe AggregateException com uma mensagem especificada que descreve o erro.Initializes a new instance of the AggregateException class with a specified message that describes the error.

AggregateException(String, Exception)

Inicializa uma nova instância da classe AggregateException com uma mensagem de erro especificada e uma referência à exceção interna que é a causa da exceção.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[])

Inicializa uma nova instância da classe AggregateException com uma mensagem de erro especificada e referências às exceções internas que são a causa dessa exceção.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, IEnumerable<Exception>)

Inicializa uma nova instância da classe AggregateException com uma mensagem de erro especificada e referências às exceções internas que são a causa dessa exceção.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.

Propriedades

Data

Obtém uma coleção de pares de chave/valor que fornecem informações adicionais definidas pelo usuário sobre a exceção.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Herdado de Exception)
HelpLink

Obtém ou define um link para o arquivo de ajuda associado a essa exceção.Gets or sets a link to the help file associated with this exception.

(Herdado de Exception)
HResult

Obtém ou define HRESULT, um valor numérico codificado que é atribuído a uma exceção específica.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Herdado de Exception)
InnerException

Obtém a instância Exception que causou a exceção atual.Gets the Exception instance that caused the current exception.

(Herdado de Exception)
InnerExceptions

Obtém uma coleção somente leitura das instâncias Exception que causaram a exceção atual.Gets a read-only collection of the Exception instances that caused the current exception.

Message

Obtém uma mensagem que descreve a exceção.Gets a message that describes the exception.

Source

Obtém ou define o nome do aplicativo ou objeto que causa o erro.Gets or sets the name of the application or the object that causes the error.

(Herdado de Exception)
StackTrace

Obtém uma representação de cadeia de caracteres de quadros imediatos na pilha de chamadas.Gets a string representation of the immediate frames on the call stack.

(Herdado de Exception)
TargetSite

Obtém o método que gerou a exceção atual.Gets the method that throws the current exception.

(Herdado de Exception)

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.Determines whether the specified object is equal to the current object.

(Herdado de Object)
Flatten()

Mescla as instâncias de um AggregateException em uma instância única e nova.Flattens an AggregateException instances into a single, new instance.

GetBaseException()

Retorna o AggregateException que é a causa raiz dessa exceção.Returns the AggregateException that is the root cause of this exception.

GetHashCode()

Serve como a função de hash padrão.Serves as the default hash function.

(Herdado de Object)
GetObjectData(SerializationInfo, StreamingContext)

Inicializa uma nova instância da classe AggregateException com dados serializados.Initializes a new instance of the AggregateException class with serialized data.

GetType()

Obtém o tipo de tempo de execução da instância atual.Gets the runtime type of the current instance.

(Herdado de Exception)
Handle(Func<Exception,Boolean>)

Invoca um manipulador em cada Exception contido por este AggregateException.Invokes a handler on each Exception contained by this AggregateException.

MemberwiseClone()

Cria uma cópia superficial do Object atual.Creates a shallow copy of the current Object.

(Herdado de Object)
ToString()

Cria e retorna uma representação de cadeia de caracteres do AggregateException atual.Creates and returns a string representation of the current AggregateException.

Eventos

SerializeObjectState

Ocorre quando uma exceção é serializada para criar um objeto de estado de exceção que contém dados serializados sobre a exceção.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Herdado de Exception)

Aplica-se a

Acesso thread-safe

Todos os membros públicos e protegidos AggregateException do são thread-safe e podem ser usados simultaneamente de vários threads.All public and protected members of AggregateException are thread-safe and may be used concurrently from multiple threads.