¿Podría alguien tener la amabilidad de confirmar si he entendido correctamente la palabra clave Async await? (Usando la versión 3 del CTP)
Hasta ahora, he descubierto que insertar la palabra clave await antes de una llamada a un método esencialmente hace 2 cosas, A. Crea un retorno inmediato y B. Crea una "continuación" que se invoca al completar la invocación del método asincrónico. En cualquier caso, la continuación es el resto del bloque de código del método.
Entonces, lo que me pregunto es si estos dos bits de código son técnicamente equivalentes y, de ser así, ¿esto básicamente significa que la palabra clave await es idéntica a la creación de un ContinueWith Lambda (es decir, es básicamente un acceso directo del compilador para uno)? Si no es así, ¿cuáles son las diferencias?
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"));
fuente
await
todavía capturaSynchronizationContext.Current
como siempre lo ha hecho. Pero en ASP.NET Core, sí loSynchronizationContext.Current
esnull
.Es "esencialmente" eso, pero el código generado hace estrictamente más que eso. Para obtener más detalles sobre el código generado, recomiendo encarecidamente la serie Eduasync de Jon Skeet:
http://codeblog.jonskeet.uk/category/eduasync/
En particular, la publicación n. ° 7 aborda lo que se genera (a partir de CTP 2) y por qué, por lo que probablemente sea una excelente opción para lo que está buscando en este momento:
http://codeblog.jonskeet.uk/2011/05/20/eduasync-part-7-generated-code-from-a-simple-async-method/
EDITAR: Creo que es probable que haya más detalles de lo que está buscando en la pregunta, pero si se pregunta cómo se ven las cosas cuando tiene múltiples esperas en el método, eso se cubre en la publicación # 9 :)
http://codeblog.jonskeet.uk/2011/05/30/eduasync-part-9-generated-code-for-multiple-awaits/
fuente