0
意図したように、他の言葉では、次のコードが動作すると例外がTask.WhenAll
とラインまで投げされていない非同期メソッドは常に含め、メソッドの戻りが「最初await
前をスローすることをTask
にその例外を捕捉していること表示されます。asyncタスクメソッドは投げられませんか?
async Task DoSomethingAsync(int i)
{
if (i == 2) throw new InvalidOperationException();
await Task.Delay(1000);
}
...
var tasks = new List<Task>();
for(int i = 0; i < 3; ++i)
{
var t = DoSomethingAsync(i); // no awaits here
tasks.Add(t);
}
// Wait for all tasks
await Task.WhenAll(tasks); // throws InvalidOperation when the other 2 tasks succeed
質問:
は非同期メソッドのこの行動は、言語仕様の一部であるか、またはそれはそれは.NETの現在のバージョンで実装されただけの方法である私は私の中で、この動作に依存することはできますか?コード?
で以下のJon Skeetの回答に加えて、Stephen Clearyはこの動作についてこの記事で簡単に述べています(http://blog.stephencleary.com/2014/10/a-tour-of-task-part-5-wait.html) – Nasreddine