Könnte jemand bitte so freundlich sein, zu bestätigen, dass ich das Schlüsselwort Async await richtig verstanden habe? (Mit Version 3 des CTP)
Bisher habe ich herausgefunden, dass das Einfügen des Schlüsselworts await vor einem Methodenaufruf im Wesentlichen zwei Dinge bewirkt: A. Es erzeugt eine sofortige Rückgabe und B. Es erzeugt eine "Fortsetzung", die nach Abschluss des asynchronen Methodenaufrufs aufgerufen wird. In jedem Fall ist die Fortsetzung der Rest des Codeblocks für die Methode.
Ich frage mich also, ob diese beiden Codebits technisch äquivalent sind. Wenn ja, bedeutet dies im Grunde, dass das Schlüsselwort await mit dem Erstellen eines ContinueWith Lambda identisch ist (dh, es ist im Grunde eine Compiler-Verknüpfung für eines). Wenn nicht, was sind die Unterschiede?
bool Success =
await new POP3Connector(
"mail.server.com", txtUsername.Text, txtPassword.Text).Connect();
// At this point the method will return and following code will
// only be invoked when the operation is complete(?)
MessageBox.Show(Success ? "Logged In" : "Wrong password");
VS
(new POP3Connector(
"mail.server.com", txtUsername.Text, txtPassword.Text ).Connect())
.ContinueWith((success) =>
MessageBox.Show(success.Result ? "Logged In" : "Wrong password"));
quelle
await
immer nochSynchronizationContext.Current
so aufgenommen, wie es immer war. Aber auf ASP.NET CoreSynchronizationContext.Current
istnull
.Es ist "im Wesentlichen" das, aber der generierte Code macht genau mehr als nur das. Für viel mehr Details zum generierten Code würde ich Jon Skeets Eduasync-Serie wärmstens empfehlen:
http://codeblog.jonskeet.uk/category/eduasync/
Insbesondere geht Post # 7 auf das ein, was generiert wird (ab CTP 2) und warum, also wahrscheinlich eine gute Ergänzung für das, wonach Sie gerade suchen:
http://codeblog.jonskeet.uk/2011/05/20/eduasync-part-7-generated-code-from-a-simple-async-method/
EDIT: Ich denke, es ist wahrscheinlich detaillierter als das, wonach Sie in der Frage suchen, aber wenn Sie sich fragen, wie Dinge aussehen, wenn Sie mehrere Wartezeiten in der Methode haben, wird dies in Beitrag 9 behandelt :)
http://codeblog.jonskeet.uk/2011/05/30/eduasync-part-9-generated-code-for-multiple-awaits/
quelle