enthalten ist. Eine Datenbankabfrage wird in einer Task ausgeführt, die einen CancellationToken von 59 Sek. Aufweist. Wenn die Aufgabe abgebrochen wird, wird eine TaskCanceledException ausgelöst. Diese Ausnahme wird jedoch als Teil einer AggregateException abgefangen. Ich möchte eine spezifische Fehlermeldung bereitstellen. Ist es also möglich, im Code zu überprüfen, ob die echte Ausnahme in der AggregateException eine TaskCancelationException ist?Erhalten Sie einen echten Ausnahmetyp, der in AggregateException
0
A
Antwort
2
Sie benötigen InnerException
oder InnerExceptions
zu verwenden, je nach Ihrer Situation:
if (x.InnerException is TaskCanceledException)
{
// ...
}
Das obige funktioniert, wenn Sie wissen, dass Sie nur eine Ausnahme haben; Wenn Sie jedoch mehrere haben, dann möchten Sie etwas mit ihnen allen tun:
var sb = new StringBuilder();
foreach (var inner in x.InnerExceptions)
{
sb.AppendLine(inner.ToString());
}
System.Diagnostics.Debug.Print(sb.ToString());
3
Sie die Liste der Ausnahmen bekommen, oder die ersten verwenden, wenn es nur eine ist:
var first = agg.InnerException; // just the first
foreach (Exception ex in agg.InnerExceptions) // iterate over all
{
// do something with each and every one
}
0
Überprüfung der Art des Innerexception bearbeitetem
catch (AggregateException ae)
{
if (ae.InnerException is TaskCanceledException)
{
LoggerService.Log(LogLevel.Error, "GetReport Request was cancelled");
throw ae.InnerException;
}
LoggerService.Log(LogLevel.Error, string.Format("GetReport Request failed: {0}", ae.InnerException.Message));
throw;
}
aber nach der Ausnahme wird über die geworfen WCF-Kommunikation ist es wieder in einer AggregateException gekapselt. Und aus irgendeinem Grund ist der Mechanismus zum Auslesen des zweiten Ausnahmetyps nicht so einfach. Aber mit der folgenden es funktioniert:
catch (AggregateException ae)
{
endMessage = string.Format("Defined Query failed. Error: {0}", ae.Message);
// Set specific error message when TaskCanceledException is contained in AggregateException
var fe = ae.InnerException as FaultException<ExceptionDetail>;
if (fe != null) if (Type.GetType(fe.Detail.Type) == typeof(TaskCanceledException)) endMessage = "Defined Query was cancelled";
logLevel = LogLevel.Error;
messageType = MessageType.Error;
}
Verwandte Themen
- 1. Statuscode der AggregateException
- 2. Ermitteln der Kompilierungszeit Multicatch-Ausnahmetyp
- 3. Ausnahmetyp in Observable.retrywhen
- 4. Wie erhalte ich mehr als einen Ausnahmetyp?
- 5. Konvertieren eines Klassenpfaddateinamens in einen echten Dateinamen
- 6. Eine AggregateException in meinem eigenen Code werfen
- 7. So erhalten Sie die gruppierten Daten nur mit echten Bedingungen
- 8. So erhalten Sie die Anzahl der echten Wörter in einem Text in Swift
- 9. Handle spezifische Ausnahmetyp in Python
- 10. PHP Check geworfen Ausnahmetyp
- 11. Scala: Wie der Ausnahmetyp eines Ausfall
- 12. Den "echten" Elternprozeß erhalten, wenn der Prozeß indirekt über launchd
- 13. Identifizieren Ausnahmetyp in einem Handler
- 14. AggregateException beim Aufruf von GetApplicationDefaultAsync()
- 15. Gibt es einen echten Vorteil der Verwendung von J #?
- 16. org.rythmengine.exception.CompileException: Unbehandelte Ausnahmetyp Exception
- 17. Holen Sie sich echten Namen in Magento
- 18. Wie verursache AggregateException mit TPL?
- 19. TaskCanceledException in AggregateException enthält keine Stack-Ablaufverfolgung
- 20. Ausnahmetyp: EXC_CRASH (SIGABRT)
- 21. Wie erhalten Sie den Ausnahmetyp ohne den String-Namen-Vergleich (ex.GetType(). FullName) im ASP.NET Page_Error-Handler?
- 22. Wie erhalten Sie einen/in einen Dateinamen?
- 23. Erhalten Sie einen Übersichtsbericht der Javadoc-Statistik
- 24. Wie bekomme ich die Liste der Fehlernummern (Errno) für einen Ausnahmetyp in Python?
- 25. Wie Sie den genauen Ausnahmetyp in ASP.Net kennen MVC
- 26. Erhalten Sie einen Teil der Zeichenfolge Pfad
- 27. Erhalten Sie alle echten Analysedaten mit der Bedingung 'custom: user_id = "XYZ"'?
- 28. Fake einen echten Anruf auf Android
- 29. Welcher Ausnahmetyp ist (0) null?
- 30. Wie kann man einen echten Atomtest in QUnit haben?
'await' die Aggregate auspackt und führt den ersten der' InnerExceptions' –
Überprüfen Sie die [Dokumentation der Klasse] (https://msdn.microsoft.com/en -us/library/system.aggregateexception (v = vs.110) .aspx). Es zeigt, wie auf die inneren Ausnahmen zugegriffen werden kann, mehrere Aggregatausnahmen zu einem einzigen reduziert werden können oder 'Handle' verwendet wird, um alle inneren Ausnahmen zu verarbeiten –