CancellationTokenが59秒のタスクでデータベースクエリが実行されます。タスクがキャンセルされると、TaskCanceledExceptionがスローされます。しかし、この例外はAggregateExceptionの一部としてキャッチされます。 特定のエラーメッセージを提供したいと思います。したがって、AggregateExceptionの実際の例外がTaskCancelationExceptionである場合、コード内で検証することは可能ですか?AggregateExceptionに含まれる実際の例外タイプを取得します。
0
A
答えて
2
あなたの状況に応じて、InnerException
またはInnerExceptions
を使用する必要があります。
if (x.InnerException is TaskCanceledException)
{
// ...
}
1つの例外のみがあることがわかっている場合は、上記のように動作します。
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;
}
をしかし例外の後の上にスローされます。
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の種類をチェック働いた:あなたは複数を持っている場合しかし、あなたはそれらのすべてで何かをしたいですWCF通信はAggregateExceptionにカプセル化されます。 何らかの理由で、2番目の例外タイプを読み取るメカニズムが簡単ではありません。しかし、次のようにそれが働いている:
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. x64で実際のC++例外を取得する
- 3. vb/asp.net:URLリダイレクトから実際の例外メッセージを取得する
- 4. 私がキャッチするAggregateExceptionは、例外がありません。
- 5. 例外の取得JDBCタイプのダイアレクトマッピング
- 6. スタックトレースから実際のタイプを取得できますか?
- 7. WCFのFaultContractに実際の例外またはカスタム例外を含める方法
- 8. IListSourceの取得にASP.NETのデータソース例外が含まれていません
- 9. sessionfactoryオブジェクトを取得する際に例外を出すコード
- 10. FirebaseApp.configure()は実際に例外を送出しますか?
- 11. lib clangカーソル/タイプの実際の綴りを取得する
- 12. 汎用オブジェクトパラメータの実際のタイプを取得する
- 13. スローされた例外(処理された例外も含む)についての通知を取得する
- 14. xqueryの結果を取得する際の例外
- 15. SQLException deadlocked:例外のどこかで実行されたクエリテキストが例外に含まれていますか?
- 16. AggregateExceptionにスタックトレースが含まれていない
- 17. ファイアベースからデータを取得する際のヌルポインタ例外
- 18. スローされ、取り込まれた例外をCurrencyManagerから取得します
- 19. "タイプの修飾Beanが定義されていません。"私は例外を取得しています
- 20. NSAttributedStringは範囲外の例外を取得します
- 21. 例外フィールドの取得 - $ jacocoData Jenkinsビルド実行中の例外
- 22. カスタムスティックプロファイルの実行例外の取得
- 23. spark-shellの起動時に例外が発生しました:データストアからスキーマカラム情報を取得する際に例外が発生しました
- 24. 例外の指定例外またはハンドル汎用例外にエラーコードが含まれています
- 25. 変数を例外に渡して例外を渡し、例外を取り除いたときにそれを取得する方法はありますか?
- 26. MapReduceプログラムの実行中にNullPointer例外を取得する
- 27. Java例外に関するメソッドが含まれています
- 28. 私は実行時にヌルポイント例外を取得しています。
- 29. にアセンブリ内の型を取得します:ReflectionTypeLoad例外
- 30. struts2に含まれるHTMLの値を取得します。
'await'はAggregateExceptionをアンラップと' InnerExceptions' –
は、[クラスのドキュメント](https://msdn.microsoft.com/enを確認の最初をスローします-us/library/system.aggregateexception(v = vs.110).aspx)。内部例外にアクセスする方法、複数の集約例外を1つに平坦化する方法、またはすべての内部例外を処理するために 'Handle'を使用する方法を示します –