Es scheint, dass ein asynchrones Verfahren seine Ausnahmen in eine Task
, dass die Methode zurückgibt, einschließlich der immer fängt die erste await
“vor geworfen Mit anderen Worten: der folgende Code funktioniert wie beabsichtigt und keine Ausnahmen, bis die Zeile mit Task.WhenAll
geworfen.:Wird asynchrone Task-Methode nie geworfen?
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
die Frage:
ist das Verhalten von Asynchron-Methoden Teil der Sprache spec oder es ist nur so, wie es in der aktuellen Version von .NET implementiert Kann ich vertrauen auf diesem Verhalten in meinen? Code?
In Zusätzlich zu Jon Skeets Antwort unten spricht Stephen Cleary über dieses Verhalten kurz in diesem [Artikel] (http://blog.stephencleary.com/2014/10/a-tour-of-task-part-5-wait.html) – Nasreddine