var firstTask = DoSomethingAsync();
verursacht dies die Ausführung der Aufgabe?
Ja. Es war besser! DoSomethingAsync
verspricht in seinem Namen zu etwas asynchron zu tun, also wenn es Sie nicht eine ausführende Aufgabe zurückgibt, dann ist sein Name eine Lüge.
Wie wird dann die Ausführung zur nächsten Zeile weitergeleitet, um die zweite Aufgabe aufzurufen?
Ich verstehe die Frage nicht.
Ich dachte, es ist synchron ohne einen Ausdruck zu erwarten.
Ihr Glaube ist falsch. "Warten" bedeutet nicht "mache das asynchron". Erwartet weder Asynchronität, noch zerstört er sie; Es verwaltet lediglich vorhandene Asynchronität. DoSomethingAsync
ist bereits asynchron unabhängig von await
. Erneut, sagt es, dass es etwas asynchron tut, so dass besser sein sollte, was es tut!
await
in Ihrem Beispiel ist nur return
. Es bedeutet "zu meinem Aufrufer zurückkehren und diese Methode irgendwann nach der erwarteten Aufgabe in der Zukunft erneut ausführen." Es ist ein asynchrones Warten.
Denken Sie an await
als wie yield return
. Wenn Sie sich in einem Iteratorblock befinden und eine Renditerückgabe auftritt, wird die Methode zurückgegeben, und dann wird sie an der Stelle fortgesetzt, an der sie irgendwann in der Zukunft aufgehört hat. await
ist im Grunde das Gleiche; nur die Mechanismen sind etwas anders.
Eine andere Möglichkeit, daran zu denken ist, dass await
einen Punkt markiert, wo die aktuelle Methode nicht ausgeführt werden kann, bis die erwartete Aufgabe abgeschlossen ist. Da die Methode nicht weiter ausgeführt werden kann, wird sie zurückgegeben.
Noch einmal, await
tut nichts zu einem Anruf auf der rechten Seite. Es ist nur ein Operator, und es gehorcht alle normalen Regeln der Operatoren:
await Foo();
und
var blah = Foo();
await blah;
sind die gleiche Sache, genau wie
var x = Foo() + Bar();
und
var f = Foo();
var b = Bar();
var x = f + b;
sind das Gleiche. Erwarte nichts Magisches zu seinen Operanden mehr als +
macht etwas Magisches zu seinen Operanden. Es ist nur eine besondere Art der Rückkehr.
Auch macht dieser Code das gleiche?
Bitte stellen Sie nicht zwei Fragen in einer Frage. Stellen Sie zwei Fragen, wenn Sie zwei Fragen haben.
Die Frage ist unklar. Die Semantik beider Workflows besteht darin, dass die von RunConcurrentTasks zurückgegebene Aufgabe als abgeschlossen gemeldet wird, wenn beide untergeordneten Aufgaben abgeschlossen sind, falls Sie dies fragen.
@Igor sodass dieser Code neu geschrieben werden kann: 'var firstTask = DoSomethingAsync(); var secondTask = DoSomethingElseAsync(); 'bewirkt, dass jede Aufgabe aufgerufen wird und die Ausführung beginnt? Wie würde ich es synchron machen, wenn ich wollte? –
Wenn Sie eine neue Frage haben, wie Sie die asynchrone Methode synchron ausführen können, stellen Sie sie bitte als Frage (offensichtlich gelten alle Standardanforderungen). Es ist nicht möglich, einen Kommentar wegen mangelnder Forschung abzulehnen ... –