並行して実行する必要がある 3 つのタスクがあります。3 つすべてを待ってから、結果の処理を続行する必要があります。次のようなものです:
var results = await Task.WhenAll(task1, task2, task3);
return process(results);
これは、3 つのタスクすべてが正常に完了すると正常に機能します。ただし、それらのいずれかが失敗すると、例外が発生し、最後までバブルアップします。これは私が望むものではありません。これらのタスクのいずれかがInvalidOperationException
I can continue processing をスローした場合、スローprocess
された例外にメソッドがアクセスできるようにする必要があります。
タスク内でできることtry...catch
はわかっていますが、それはハックではないようです。意味的に正しくない (タスク DID が失敗する - 正常に返されない) だけでなく、このアプローチを使用した場合、結果が成功するか例外を返す可能性があるため、カスタム型を返す必要があります。ただし、Task<T>
オブジェクトは既に Exception チャネルを公開しているため、二重の義務を負わず、既に存在するものを使用することをお勧めします。