2016-05-28 6 views
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の現在のバージョンで実装されただけの方法である私は私の中で、この動作に依存することはできますか?コード?

+1

で以下のJon Skeetの回答に加えて、Stephen Clearyはこの動作についてこの記事で簡単に述べています(http://blog.stephencleary.com/2014/10/a-tour-of-task-part-5-wait.html) – Nasreddine

答えて

関連する問題