¿Cómo entiendo el código asincrónico?

¡Hola, Habr! Les presento a su atención la traducción (con pequeñas correcciones) del artículo "¿Cómo pienso sobre el código asincrónico?" por Leslie Richardson.



El código asincrónico se está volviendo cada vez más popular para escribir aplicaciones receptivas. Desafortunadamente, la programación asincrónica también presenta dificultades adicionales. Como consecuencia, comprender cómo funciona dicho código puede ser una tarea abrumadora, independientemente de su experiencia. Si recién está comenzando con el código asincrónico, o desea repasar su comprensión, ¡esta es una introducción al mundo de la programación asincrónica!



¿Qué es el código asincrónico?



La programación asincrónica le permite ejecutar un bloque de código sin detener (o bloquear) todo el hilo en el que se realiza la acción. Un mito común sobre el código asincrónico es que mejora el rendimiento, lo que no siempre es cierto. En cambio, la característica principal de la programación asincrónica es que aumenta el número de tareas (rendimiento) que se pueden ejecutar simultáneamente, sin tener que bloquear el hilo en el que se realizan estas acciones.



Podría pensar que el código asincrónico es muy similar al código multiproceso, después de todo, muchos métodos se pueden ejecutar simultáneamente en ambos casos. De hecho, la programación asincrónica se puede utilizar junto con aplicaciones de un solo subproceso y de varios subprocesos. Esto significa que puede tener un programa asincrónico de un solo subproceso en el que un subproceso puede ejecutar tareas paralelas. Por el contrario, también puede tener una aplicación asincrónica de subprocesos múltiples donde varios subprocesos pueden ejecutar varias tareas paralelas.



¿Por qué debería usar código asincrónico? ¡Un ejemplo, por favor!



Para tener alguna analogía para demostrar la programación asincrónica, considere el proceso de hornear un pastel. Este proceso estará representado por un hilo que realiza varios pasos (o tareas), como se muestra en el código siguiente. Este código es correcto y aún tiene un delicioso pastel después de que se ejecuta el método. Sin embargo, dado que todo el código es sincrónico, cada línea se ejecutará secuencialmente. En otras palabras, estará completamente quieto mientras espera que el horno termine de precalentarse. ¡Pero al mismo tiempo, podrías hacer masa para tu pastel!



Método Sincrónico MakeCake ()



imagen



Programa de horneado de pasteles sincrónico



imagen



En la vida real, tiende a dividir este proceso en tareas, amasando la masa mientras el horno se calienta. O haga el glaseado mientras se hornea el pastel en el horno. Esto aumenta su productividad y le permite hornear el pastel mucho más rápido. ¡Aquí es donde el código asincrónico resulta útil! Al hacer que nuestro código actual sea asíncrono, podemos hacer otras cosas para pasar el tiempo mientras esperamos el resultado de una tarea , como hornear un pastel en el horno.

Para hacer esto, cambiaremos nuestro código, además de agregar el método PassTheTime . Ahora, nuestro código guarda el estado de la tarea, inicia otra operación sincrónica o asincrónica y obtiene el resultado de la tarea guardada cuando es necesario.



Asynchronous MakeCake ()

imagen



Programa de horneado de pasteles asincrónico

imagen



En comparación con el método MakeCake sincrónico , que carece del método PassTheTime , el método MakeCakeAsync asincrónico puede completar más tareas sin bloquear el hilo, lo que reduce el tiempo que se tarda en completar todo el método.



Comparación de programas asíncronos y síncronos



imagen



¿Cómo escribo código asincrónico en .NET?



C # le permite escribir código asíncrono mediante el Grupo de Tipo y los aguardan y asincrónicos palabras clave . El tipo de tarea informa al llamante de un posible tipo de devolución. También indica que se pueden seguir realizando otras acciones en el método de llamada. La palabra clave async está emparejada con la palabra clave await , que notifica al compilador que necesitamos un valor de retorno del método, pero no inmediatamente. Como resultado, no necesitamos bloquear el hilo de llamada y podemos continuar realizando otras tareas hasta que se requiera el valor esperado. Inicialmente, el método asincrónico se ejecutará sincrónicamente hasta que se encuentre la palabra clave await... Este es exactamente el momento en que la ejecución del método comenzará de forma asincrónica.



¡Aprendí sobre el código asincrónico! ¿Ahora que?



Si bien una aplicación para hornear pasteles asincrónica es excelente, hay muchas otras aplicaciones del mundo real que también usan código asincrónico. Los dos ejemplos más comunes son:



Aplicaciones que utilizan solicitudes HTTP: según la solicitud, las llamadas HTTP pueden tardar mucho en procesarse. El uso de código asincrónico nos permite realizar otras operaciones mientras esperamos una respuesta del servidor.



Ejemplo de solicitud HTTP GET



imagen



Aplicaciones de interfaz de usuario: las aplicaciones de WPF o cualquier otra que use botones, cuadros de texto y otros recursos de UX también son excelentes para la implementación asincrónica. Por ejemplo, una aplicación WPF que analiza un archivo. Este procedimiento puede llevar algún tiempo. Sin embargo, al hacer que esta acción sea asincrónica, aún puede interactuar con la interfaz de usuario sin detener completamente la aplicación mientras espera que se complete la operación.



All Articles