Tropecé con esta publicación que habla sobre hacer solicitudes web asíncronas.
Ahora, aparte de la simplicidad, si en el mundo real, todo lo que haces es hacer una solicitud asíncrona y esperarla en la siguiente línea, ¿no es lo mismo que hacer una llamada de sincronización en primer lugar?
c#
.net
asynchronous-programming
Mrchief
fuente
fuente

Respuestas:
No,
async + await != syncdebido a la continuación.Desde MSDN 'Programación asincrónica con asíncrono y espera (C # y Visual Basic)'
Por ejemplo, la ejecución asincrónica no bloqueará el subproceso de la interfaz de usuario y
Some TextBox.Textse actualizará una vez que la descarga haya finalizadofuente
Console.WriteLine(await GetStringOverNetwork());? ¿Qué sucede si necesita la salida de la invocación asincrónica? ¿Se bloqueará el programa en el primer acceso, incluso si el hilo podría continuar la ejecución?No, no es lo mismo.
Su
asyncbloque de código está esperando que laawaitllamada regrese para continuar, sin embargo, el resto de su aplicación no está esperando y aún puede continuar de manera normal.Por el contrario, una llamada síncrona haría que toda su aplicación o hilo espere hasta que el código termine de ejecutarse para continuar con cualquier otra cosa.
fuente
Permítanme aclarar cosas con respecto a async / wait.
Cuando se encuentra en espera, la máquina de estado subyacente permite que el control se devuelva de inmediato. Luego, cuando se completa la llamada esperada, la máquina de estado subyacente permite que la ejecución se reanude en la línea después de la llamada esperada.
Por lo tanto, el bloque asíncrono no está bloqueado ni está esperando que finalice la llamada esperada; El control se devuelve inmediatamente cuando se encuentra el comando de espera.
La máquina de estado subyacente es parte de la "magia" detrás del uso de async / wait que no se usa y se pierde.
fuente
Me topé con esto con la misma pregunta en mente, sin embargo, después de leer las respuestas, la pregunta parece persistir, confundida por las referencias a "magia bajo el capó".
De la programación asincrónica mencionada anteriormente :
¿Se
awaitbloquea el contexto que se encuentra ?¿El resto de la aplicación se bloquea en el
await?Depende de cómo se escriba su solicitud. Si se trata de una serie de
awaittareas ed dependientes iniciadas secuencialmente en el mismo contexto (ver: Intentando entender un comportamiento asíncrono / en espera )de esta manera, cada uno
awaitbloquearía el desove del siguiente.Por otro lado, las mismas tareas dependientes lanzadas en paralelo se ejecutarían en paralelo y el contexto solo se bloquearía en el resp.
await:En general, el
awaitrendimiento se ejecuta en el contexto externo, desde donde se llama al contexto actual. Sin embargo, si el contexto externo en sí mismo espera la corriente, es como una secuencialawaiten el mismo contexto.Entonces, para cosechar los
asyncbeneficios, uno necesita diseñar la aplicación para ejecutar varios contextos paralelos (UI, cliente de datos, etc.), luego,awaiten un contexto, se ejecuta a otros contextos, para que toda la aplicación no se bloquee en un individuoawait.fuente