在具有59sec的CancellationToken的任務中執行數據庫查詢。如果任務被取消,則拋出TaskCanceledException。但是這個異常被捕獲爲AggregateException的一部分。 我想提供一個特定的錯誤消息。那麼是否有可能在代碼中驗證AggregateException中的真正異常是否是TaskCancelationException?獲取AggregateException中包含的實際異常類型
0
A
回答
2
您需要使用InnerException
或InnerExceptions
,根據您的情況:
if (x.InnerException is TaskCanceledException)
{
// ...
}
如果你知道你只有一個例外,那麼上面的方法就行得通;但是,如果您有多個,那麼你想要做的事與他們:
var sb = new StringBuilder();
foreach (var inner in x.InnerExceptions)
{
sb.AppendLine(inner.ToString());
}
System.Diagnostics.Debug.Print(sb.ToString());
3
你可以得到例外列表中,或者使用第一個,如果只有一個:
var first = agg.InnerException; // just the first
foreach (Exception ex in agg.InnerExceptions) // iterate over all
{
// do something with each and every one
}
0
檢查的InnerException類型奮力:
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;
}
但異常後扔過WCF通信,它再次封裝在一個AggregateException中。 由於某種原因,讀出第二種異常類型的機制並不那麼容易。但有以下這是工作:
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;
}
相關問題
- 1. 什麼時候AggregateException包含多於一個內部異常?
- 2. 獲取Javassist類型而不是實際的Hibernate實體類型
- 3. 獲取包含類的類型
- 4. 等待異步任務,但沒有在AggregateException中包裝異常
- 5. 如何獲取Kotlin中實際泛型參數的實際類型參數?
- 6. 從反射獲取實際類型fieldInfo
- 7. 獲取包含泛型類型與ClassTag
- 8. 從類型變量中獲取實際類型
- 9. 獲取包含類的實例
- 10. 獲取類型的彙編:ReflectionTypeLoad異常
- 11. 獲取實際類型從一個普通的返回類型
- 12. 從異常中獲取實際StackTrace對象
- 13. 如何記錄異常,並重新拋出的實際類型
- 14. 如何獲取異常的實例類型?
- 15. 獲取包含類
- 16. 獲取IListSource不包含ASP.NET中的任何數據源異常
- 17. 如何使用Java反射獲取javax.xml.ws.Holder中的實際類型?
- 18. 獲取XML節點中值的實際數據類型 - C#
- 19. vb/asp.net:從url重定向獲取實際異常消息
- 20. 是否可以從堆棧跟蹤中獲取實際類型?
- 21. 如何獲得泛型類型的實際類型?
- 22. C++類包含異常處理
- 23. 實體框架4.3 POCO包含在複雜類型拋出異常
- 24. 如何獲取字符串內的值的實際類型?
- 25. 從包含它的類中獲取enum.values()
- 26. 獲取RLMArray中包含的類
- 27. 獲取最後一個類型的實際第n個類型的位置
- 28. 如何使用ResultSet對象獲取實際的數據類型?
- 29. 獲取lib clang遊標/類型的實際拼寫
- 30. 獲取包的URI類型
'await'解開的AggregateException並拋出第一個'InnerExceptions'的 –
檢查[類的文檔(https://msdn.microsoft.com/en -us /庫/ system.aggregateexception(v = vs.110)的.aspx)。它顯示瞭如何訪問內部異常,將多個聚合異常合併爲一個,或者使用'Handle'處理所有內部異常 –