Antes de aplicar estos métodos en programación, debemos conocer un poco de la ejecución de los programas. El espacio de tiempo en el cual se ejecuta un programa en un sistema operativo o entorno se denomina tiempo de ejecución. En dicho proceso se ejecutan una serie de instrucciones que componen complejos algoritmos; con el fin de realizar la acción para cual fue diseñado dicho sistema.

Dicho sistema se alimenta de entradas que, a su vez resultan en salidas, es como si estuvieran en fila esperando su turno, y esto  a su vez  incurre en tiempo de espera, idealmente corto. Tratando de optimizar el proceso, una solución clásica es asignar ese tiempo de espera a otro proceso, que pueda ejecutarse sin necesitar mucho tiempo, de este modo se aprovecha el uso del CPU. Nuestro proceso inconcluso se queda en la cola, mientras otro toma su lugar. Cuando las condiciones para la correcta ejecución de ese proceso se tienen (y el CPU está libre), este se reanuda. Existen varias políticas de repartición de CPU dependiendo del proceso en ejecución.

Aquí es donde comienza el juego de los métodos o llamadas síncronos y asíncronos. En el caso de métodos síncrono, la invocación espera el resultado, es decir, invocas a un método y te quedas en ese punto esperando hasta tanto se devuelva un resultado (o un error). Por otra parte, con los asíncronos, realizas la invocación, pero continúas con la ejecución y por lo general se define un callback (alguna función o método)  que recibirá la respuesta o el error para tomar alguna acción.  En este ultimo la ejecución no se queda esperando la respuesta continua sin bloquear la ejecución del hilo actual.

En esta ocasión nos centraremos en los métodos asincronos, especificamente implementados en C#.

Convirtiendo en Código

magic-wand

 

A partir de Visual Studio 2012 se presenta un enfoque simplificado, la programación async, que aprovecha la compatibilidad asincrónica en .Net Framework 4.5 y Windows en tiempo de ejecución. Las palabras mágicas para utilizar métodos asíncronos son Async y de espera (await).

El modificador de async indica que el método, expresión lambda, o método anónimo que modifica es asincrónicos. Tales métodos se conocen como métodos async. Un método async proporciona una manera cómoda de hacer el trabajo de larga duración sin bloquear el subproceso del llamador. El invocador de un método async puede reanudar el trabajo sin esperar a que el método async finalice.

El ejemplo siguiente se muestra la estructura de un controlador de eventos async, StartButton_Click, que llama a un método async, ExampleMethodAsync. El resultado del método es la longitud de un sitio Web descargado. El código es adecuado para un Windows Presentation Foundation (WPF).

codigo

Lo más importante a entender en la programación asincrónica es cómo el flujo de control se desplaza del método. El diagrama siguiente le guía en el proceso o método.

metodos asincronos

 

Conclusiones


La asincronía es esencial para las actividades que son potencialmente bloqueantes, por ejemplo cuando su aplicación accede a la web. El acceso a un recurso web a veces es lento o con retrasos. Si esta actividad está bloqueada dentro de un proceso sincrónico, la aplicación completa debe esperar. En cambio con un proceso asíncrono, la aplicación puede continuar con otro trabajo que no depende del recurso web hasta que la tarea potencialmente bloqueante o síncrona finaliza.

Así que vale la pena aprender a usarlos adecuadamente.

Este es solo un articulo introductorio, donde espero que hayan quedado claros los conceptos expuestos. Cualquier Duda o comentario, estamos a la orden.