私は3つのタスクを並行して実行する必要があります。私は3つすべてを待ってから、結果を処理し続ける必要があります。したがって、次のようになります。タスクのバッチで部分的な成功を処理するにはどうすればよいですか?
3つのタスクがすべて正常に完了すると、正常に動作します。しかし、それらのいずれかが失敗した場合、私はすべての方法をバブルアップする例外が発生します。これは私が望むものではありません。これらのタスクのいずれかがInvalidOperationException
を処理しても処理を続行できる場合は、スローされた例外にアクセスするにはprocess
メソッドが必要です。
私はタスク内でtry...catch
ができることを認識していますが、それはハックのようには見えません。意味的に間違っている(タスクDIDが失敗する - それは正常に返るべきではない)、私がこのアプローチを行った場合、結果が成功するか、例外を返すので、カスタムタイプを返さなければならない。しかしながら、Task<T>
オブジェクトは既にExceptionチャンネルを公開しているので、私は二重課税をしないで、すでに存在しているものを使うだけです。あなたは以下の私の例のように、このケースを扱うことができる
私が正しく理解していれば、あなたは 'var combinedTask = Task.WhenAll(...); combinedTask.IgnoreExceptions();を待ちます。戻りプロセス(combinedTask); '? 'IgnoreExceptions()'は例外をスローせずにフォールト 'Task'を'待つ 'ことができる場所です。あるいは、結果には正確に何が含まれるべきですか? – svick
@svick - 私は同意します、結果はおそらく一貫したタイプではないようです。私の考えは、ここではTaskオブジェクトで直接作業し、async/awaitファサードは使用しないでください。エラーに関係なくすべてのタスクが完了するようにすれば、それらのタスクオブジェクトで作業することができますが、その方法はわかりません。 –
@svick - 存在するものは 'IgnoreExceptions()'ですか?私はそれを見つけることができません。 –