AggregateException Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Představuje jednu nebo více chyb, ke kterým dochází během provádění aplikace.
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
- Dědičnost
- Atributy
Příklady
Následující příklad zachytí AggregateException výjimku a zavolá metodu Handle pro zpracování každé výjimky, která obsahuje. Kompilace a spuštění příkladu s první task1 proměnnou by měla vést k AggregateException objektu, který obsahuje UnauthorizedAccessException výjimku. Komentování daného řádku, zrušení komentáře druhé task1 proměnné a kompilace a spuštění příkladu AggregateException vytvoří objekt, který obsahuje IndexOutOfRangeException výjimku.
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
Poznámky
AggregateException slouží ke sloučení více selhání do jednoho objektu vyvolané výjimky. Používá se široce v knihovně TPL (Task Parallel Library) a Parallel LINQ (PLINQ). Další informace naleznete v tématu Zpracování výjimek a postupy: Zpracování výjimek v plINQ dotazu. Další informace najdete v Aggregating Exceptions entry in .NET Matters blog.
Konstruktory
| Name | Description |
|---|---|
| AggregateException() |
Inicializuje novou instanci AggregateException třídy se zprávou zadanou systémem, která popisuje chybu. |
| AggregateException(Exception[]) |
Inicializuje novou instanci AggregateException třídy s odkazy na vnitřní výjimky, které jsou příčinou této výjimky. |
| AggregateException(IEnumerable<Exception>) |
Inicializuje novou instanci AggregateException třídy s odkazy na vnitřní výjimky, které jsou příčinou této výjimky. |
| AggregateException(SerializationInfo, StreamingContext) |
Zastaralé.
Inicializuje novou instanci AggregateException třídy serializovanými daty. |
| AggregateException(String, Exception) |
Inicializuje novou instanci AggregateException třídy se zadanou chybovou zprávou a odkazem na vnitřní výjimku, která je příčinou této výjimky. |
| AggregateException(String, Exception[]) |
Inicializuje novou instanci AggregateException třídy se zadanou chybovou zprávou a odkazuje na vnitřní výjimky, které jsou příčinou této výjimky. |
| AggregateException(String, IEnumerable<Exception>) |
Inicializuje novou instanci AggregateException třídy se zadanou chybovou zprávou a odkazuje na vnitřní výjimky, které jsou příčinou této výjimky. |
| AggregateException(String) |
Inicializuje novou instanci AggregateException třídy se zadanou zprávou, která popisuje chybu. |
Vlastnosti
| Name | Description |
|---|---|
| Data |
Získá kolekci párů klíč/hodnota, které poskytují další uživatelem definované informace o výjimce. (Zděděno od Exception) |
| HelpLink |
Získá nebo nastaví odkaz na soubor nápovědy přidružený k této výjimce. (Zděděno od Exception) |
| HResult |
Získá nebo nastaví HRESULT, kódovanou číselnou hodnotu, která je přiřazena ke konkrétní výjimce. (Zděděno od Exception) |
| InnerException |
Exception Získá instanci, která způsobila aktuální výjimku. (Zděděno od Exception) |
| InnerExceptions |
Získá kolekci Exception instancí jen pro čtení, které způsobily aktuální výjimku. |
| Message |
Získá zprávu, která popisuje výjimku. |
| Message |
Získá zprávu, která popisuje aktuální výjimku. (Zděděno od Exception) |
| Source |
Získá nebo nastaví název aplikace nebo objektu, který způsobuje chybu. (Zděděno od Exception) |
| StackTrace |
Získá řetězcové znázornění okamžitých rámců v zásobníku volání. (Zděděno od Exception) |
| TargetSite |
Získá metodu, která vyvolá aktuální výjimku. (Zděděno od Exception) |
Metody
| Name | Description |
|---|---|
| Equals(Object) |
Určuje, zda je zadaný objekt roven aktuálnímu objektu. (Zděděno od Object) |
| Flatten() |
Zploštěná AggregateException instance do jedné nové instance. |
| GetBaseException() |
Exception Vrátí původní příčinu této výjimky. Tato výjimka je buď kořenová výjimka, nebo první AggregateException , která obsahuje buď více vnitřních výjimek, nebo vůbec žádné vnitřní výjimky. |
| GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
Zastaralé.
Inicializuje novou instanci AggregateException třídy serializovanými daty. |
| GetType() |
Získá typ modulu runtime aktuální instance. (Zděděno od Exception) |
| Handle(Func<Exception,Boolean>) |
Vyvolá obslužnou rutinu pro každý Exception z nich AggregateExceptionobsažených . |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| ToString() |
Vytvoří a vrátí řetězcovou reprezentaci aktuálního AggregateException. |
Událost
| Name | Description |
|---|---|
| SerializeObjectState |
Zastaralé.
Nastane, když je výjimka serializována vytvořit objekt stavu výjimky, který obsahuje serializovaná data o výjimce. (Zděděno od Exception) |
Platí pro
Bezpečný přístup z více vláken
Všechny veřejné a chráněné členy AggregateException jsou bezpečné pro přístup z více vláken a mohou být použity souběžně z více vláken.