、、、の 3 つのタスクがa
あるb
としc
ます。3 つすべてが、1 ~ 5 秒のランダムな時間に例外をスローすることが保証されています。次に、次のコードを記述します。
await Task.WhenAny(a, b, c);
これにより、最終的には、最初に失敗したタスクから例外がスローされます。ここには何もないためtry...catch
、この例外はコード内の別の場所にバブルアップします。
残りの 2 つのタスクが例外をスローするとどうなるでしょうか。これらの監視されていない例外は、プロセス全体を強制終了させる原因になるのではないでしょうか? つまり、使用する唯一の方法はブロックWhenAny
内であり、try...catch
続行する前に残りの 2 つのタスクを何らかの方法で観察するということですか?
フォローアップ: Async Targeting Pack を使用した .NET 4.5と.NET 4.0 の両方に回答を適用したいと思います(ただしTaskEx.WhenAny
、その場合は明らかに使用しています)。