失敗したタスク (例外が設定されているタスク)await
を待機しているときに、格納されている例外を再スローします。保存された例外が の場合AggregateException
、最初の例外が再スローされ、残りは破棄されます。
エラー情報を誤って失わないように、どのように使用するawait
と同時にオリジナルをスローすることができますか?AggregateException
もちろん、これに対するハックな解決策を考えることが可能であることに注意してください (たとえば、 を try-catch してawait
から を呼び出しますTask.Wait
)。私は本当にきれいな解決策を見つけたいと思っています。ここでのベストプラクティスは何ですか?
カスタム awaiter を使用することを考えましたが、ビルトインにTaskAwaiter
は多くの魔法が含まれており、完全に再現する方法がわかりません。TPL 型で内部 API を呼び出します。また、そのすべてを再現したくありません。
あなたがそれで遊んでみたいなら、ここに短い再現があります:
static void Main()
{
Run().Wait();
}
static async Task Run()
{
Task[] tasks = new[] { CreateTask("ex1"), CreateTask("ex2") };
await Task.WhenAll(tasks);
}
static Task CreateTask(string message)
{
return Task.Factory.StartNew(() => { throw new Exception(message); });
}
では、2 つの例外のうち 1 つだけがスローされRun
ます。
Stack Overflow に関する他の質問では、この特定の問題に対処していないことに注意してください。重複を提案するときは注意してください。