.NET Task Parallel Libraryのエラー処理に関する質問があります。どちらのケースでは、AggregateException
は1つ以上の内部例外を保持しますか?私はこれが元に起こるかもしれないことを知っている。 Task.WaitAll(anArrayOfTasks)
を呼び出すと2つ以上のタスクが例外をスローしていますが、それ以外の場合があります(つまり、1つのタスクが完了するのを待っているだけで1つ以上の内部例外が発生する可能性があります)。AggregateExceptionにはいつ複数の内部例外が含まれますか?
答えて
タスクは本質的に複数の内部例外を含むことができる集合例外を発生させることができます。つまり、タスクを処理する際には、複数の内部例外を含む集約例外を常に考慮する必要があります。 Task.WaitAllを使用していなくても、あなたが待っているタスクは内部的に複数のサブタスクを待つかもしれません。また、待機しているタスクが複数の例外を返す場合があります。あなたは単に発信者として知ることはできません。
一般的なケースでは、例外のリストを取得し、そのようなエラー処理を設計すると仮定して、他の非同期タスクに依存しない単一の非同期タスクを処理する場合2つ以上の例外がパスされている状況。 – scripni
おそらく、そうかもしれません。それはあまり起こりそうもない。内部のタスクが複数の子タスクを待つ場合。複数の(おそらく集合!)内部例外を含む1つのAggregateExceptionを含む新しいAggregateExceptionが作成されます。したがって、すべての例外を取得してコレクションとして処理するためには、AggregateExceptionでFlattenメソッドを呼び出すことを常にお勧めします。 – Polity
この場合、どのようにエラーをUIに渡しますか?通常、操作を実行する場合、成功またはエラーの2つの結果があります。暗黙的にエラーリストを処理するUIを設計することは私の意見では混乱しているように見えますが、2つのケース(1つはエラー用、もう1つは複数エラー)は複雑すぎるようです。私はUIで常に1つの例外を処理し、すべての例外をログに記録することを考えていました(そして、エラーログを調べるためにメッセージをユーザに提示します)。 – scripni
これは、「親」タスクと1つ以上の「子」タスクが親に接続されている場合に発生します。つまり、親タスクはすべての子タスクが終了し、子タスクからの例外も親タスクに伝播した場合にのみ終了します。
テイク、例えば、次のコード:
var task = Task.Factory.StartNew(
() =>
{
Task.Factory.StartNew(
() => { throw new Exception("inner"); },
TaskCreationOptions.AttachedToParent);
throw new Exception("outer");
});
あなたそのタスクにWait()
が、それはAggregateException
をthowsた場合、それは次のようになります。
AggregateException
Exception
:外側AggregateException
Exception
:インナー
あなたはそれがAggregateException
の内部AggregateException
秒を含めることができることを好きではない場合、あなたはthe Flatten()
methodを使用することができます。 AggregateException
の処理に使用できる別の方法もあります。Handle()
。
Handle()メソッドについて言及してくれてありがとうございます。私はそのことについて知らなかったのです。 – scripni
- 1. AggregateExceptionに含まれる実際の例外タイプを取得します。
- 2. 私がキャッチするAggregateExceptionは、例外がありません。
- 3. 内部例外のない未知の例外がスローされますか?
- 4. 内部例外のプロパティが破棄されていますか?
- 5. AggregateExceptionにスタックトレースが含まれていない
- 6. 関数内に複数の 'includes'が含まれています
- 7. PHP:関数内の関数が内部関数に含まれています
- 8. jsp内のdiv内に外部Webサイトが含まれています
- 9. Entity Frameworkコードファーストアプローチエラー:シーケンスに外部キーを持つテーブルの複数の要素が含まれています
- 10. 例外の指定例外またはハンドル汎用例外にエラーコードが含まれています
- 11. には外部モーダルのhtmlドキュメントが含まれています
- 12. リレーションシップは複数の外部キーを持つ3NF内にありますか?
- 13. MYSQL:外部キーにコレクションが含まれていますか?
- 14. Antには外部プロジェクトが含まれています
- 15. Chartjsには外部オプションが含まれています
- 16. angular2には外部HTMLテンプレートが含まれています
- 17. Emberに外部HTTPサーバー経由の外部JSが含まれています
- 18. Sequelize + Nodejs内に複数の外部キーがあります
- 19. SQLException deadlocked:例外のどこかで実行されたクエリテキストが例外に含まれていますか?
- 20. SLF4J:クラスパスには複数のSLF4Jバインディングが含まれています。除外slf4j
- 21. Hibernate - 複合主キーに外部キーが含まれています
- 22. Java例外に関するメソッドが含まれています
- 23. Antに外部の.jarが含まれています
- 24. SQLの更新テーブル。 1つに外部キーが含まれています
- 25. JQM外部パネルにはカスタムカラーが含まれていません
- 26. 外部テーブルハイブを作成します。場所に複数のファイルが含まれています
- 27. CakePHPプラグインに外部PHPファイルが含まれています
- 28. 複数のプロバイダが1つの迷惑メールファイルに含まれていますか?
- 29. PHPの内部にエコーが含まれています
- 30. MongoDB - 内部配列を除外しますが、その数を含めます
パラレルライブラリとは関係ありません。ファイルのリストを削除する方法があるとしますが、ロックされているものがあるとします。 'AggregateException'を使ってロックされたファイルを再スローし、残りのファイルを削除し続けることができます。 – nalply