AggregateException Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Representa um ou mais erros que ocorrem durante a execução do aplicativo.
public ref class AggregateException : Exception
public class AggregateException : Exception
[System.Serializable]
public class AggregateException : Exception
type AggregateException = class
inherit Exception
[<System.Serializable>]
type AggregateException = class
inherit Exception
Public Class AggregateException
Inherits Exception
- Herança
- Atributos
Exemplos
O exemplo a seguir captura a AggregateException exceção e chama o Handle método para lidar com cada exceção que ele contém. Compilar e executar o exemplo com a primeira task1 variável deve resultar em um AggregateException objeto que contenha uma exceção UnauthorizedAccessException . Comentar essa linha, descompactar a segunda task1 variável e compilar e executar o exemplo produz um AggregateException objeto que contém uma exceção IndexOutOfRangeException .
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)
{
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)
open System
open System.IO
open System.Threading.Tasks
let getAllFiles str =
// Should throw an UnauthorizedAccessException exception.
System.IO.Directory.GetFiles(str, "*.txt", System.IO.SearchOption.AllDirectories)
// Get a folder path whose directories should throw an UnauthorizedAccessException.
let path =
let directory =
Environment.SpecialFolder.UserProfile
|> Environment.GetFolderPath
|> Directory.GetParent
directory.FullName
// Use this line to throw an exception that is not handled.
// let task1 = Task<string []>.Factory.StartNew(fun () -> raise (IndexOutOfRangeException()) )
let task1 = Task.Factory.StartNew(fun () -> getAllFiles (path))
let execute () =
try
task1.Wait()
with
| :? UnauthorizedAccessException -> printfn "Caught unauthorized access exception-await behavior"
| :? AggregateException as ae ->
printfn "Caught aggregate exception-Task.Wait behavior"
ae.Handle (fun x ->
match x with
| :? UnauthorizedAccessException ->
printfn "You do not have permission to access all folders in this path."
printfn "See your network administrator or try another path."
true
| _ -> false)
printfn $"""task1 Status: {if task1.IsCompleted then "Completed," else ""}{task1.Status}"""
execute ()
// 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. (Index was outside the bounds of the array.) (Index was outside the bounds of the array.)
// ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
// at Exception1.task1@19.Invoke()
// at System.Threading.Tasks.Task`1.InnerInvoke()
// at System.Threading.Tasks.Task.<>c.<.cctor>b__277_0(Object obj)
// at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
// --- End of stack trace from previous location ---
// at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
// at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
// --- End of inner exception stack trace ---
// at System.AggregateException.Handle(Func`2 predicate)
// at <StartupCode$exception1>.$Exception1.main@()
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 que pode ser gerado. Ele é usado extensivamente na TPL (Biblioteca Paralela de Tarefas) e linq paralela (PLINQ). Para obter mais informações, consulte Tratamento de Exceções e Como lidar com exceções em uma consulta PLINQ. Para obter mais informações, consulte a entrada Aggregating Exceptions no blog .NET Matters.
Construtores
| Nome | Description |
|---|---|
| AggregateException() |
Inicializa uma nova instância da classe AggregateException com uma mensagem fornecida pelo sistema que descreve o erro. |
| AggregateException(Exception[]) |
Inicializa uma nova instância da AggregateException classe com referências às exceções internas que são a causa dessa exceção. |
| AggregateException(IEnumerable<Exception>) |
Inicializa uma nova instância da AggregateException classe com referências às exceções internas que são a causa dessa exceção. |
| AggregateException(SerializationInfo, StreamingContext) |
Obsoleto.
Inicializa uma nova instância da AggregateException classe com dados serializados. |
| AggregateException(String, Exception) |
Inicializa uma nova instância da AggregateException classe com uma mensagem de erro especificada e uma referência à exceção interna que é a causa dessa exceção. |
| AggregateException(String, Exception[]) |
Inicializa uma nova instância da AggregateException classe com uma mensagem de erro especificada e faz referência às exceções internas que são a causa dessa exceção. |
| AggregateException(String, IEnumerable<Exception>) |
Inicializa uma nova instância da AggregateException classe com uma mensagem de erro especificada e faz referência às exceções internas que são a causa dessa exceção. |
| AggregateException(String) |
Inicializa uma nova instância da classe AggregateException com uma mensagem especificada que descreve o erro. |
Propriedades
| Nome | Description |
|---|---|
| Data |
Obtém uma coleção de pares chave/valor que fornecem informações adicionais definidas pelo usuário sobre a exceção. (Herdado de Exception) |
| HelpLink |
Obtém ou define um link para o arquivo de ajuda associado a essa exceção. (Herdado de Exception) |
| HResult |
Obtém ou define HRESULT, um valor numérico codificado atribuído a uma exceção específica. (Herdado de Exception) |
| InnerException |
Obtém a Exception instância que causou a exceção atual. (Herdado de Exception) |
| InnerExceptions |
Obtém uma coleção somente leitura das Exception instâncias que causaram a exceção atual. |
| Message |
Obtém uma mensagem que descreve a exceção. |
| Message |
Obtém uma mensagem que descreve a exceção atual. (Herdado de Exception) |
| Source |
Obtém ou define o nome do aplicativo ou do objeto que causa o erro. (Herdado de Exception) |
| StackTrace |
Obtém uma representação de cadeia de caracteres dos quadros imediatos na pilha de chamadas. (Herdado de Exception) |
| TargetSite |
Obtém o método que gera a exceção atual. (Herdado de Exception) |
Métodos
| Nome | Description |
|---|---|
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| Flatten() |
Nivela uma AggregateException instância em uma única instância nova. |
| GetBaseException() |
Retorna a Exception causa raiz dessa exceção. Essa exceção é a exceção raiz ou a primeira AggregateException que contém várias exceções internas ou nenhuma exceção interna. |
| GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
Obsoleto.
Inicializa uma nova instância da AggregateException classe com dados serializados. |
| GetType() |
Obtém o tipo de runtime da instância atual. (Herdado de Exception) |
| Handle(Func<Exception,Boolean>) |
Invoca um manipulador em cada Exception um contido por isso AggregateException. |
| MemberwiseClone() |
Cria uma cópia superficial do Objectatual. (Herdado de Object) |
| ToString() |
Cria e retorna uma representação de cadeia de caracteres do atual AggregateException. |
Eventos
| Nome | Description |
|---|---|
| SerializeObjectState |
Obsoleto.
Ocorre quando uma exceção é serializada para criar um objeto de estado de exceção que contém dados serializados sobre a exceção. (Herdado de Exception) |
Aplica-se a
Acesso thread-safe
Todos os membros públicos e protegidos AggregateException são thread-safe e podem ser usados simultaneamente de vários threads.