Vanguarsoft Developers blog

Ing. Javier Leal -Desarrollador CPANAX C.A / Microsoft Student Partners – VENEZUELA

Llamada a API asincrónicas en C#

Deja un comentario

Hay que ver que este nuevo Framework trajo bastantes sorpresas que descubrir y aprender a utilizar, ha medida que ha avanzado el tiempo el poder del computo aumenta los software tienen mas disponibilidad de procesamiento y eso es justo lo que se esta aprovechando con estas características.

Muchos usuario nos enojamos al ver que nuestras aplicaciones al ejecutar una función se quedan en un estado paralizado y hay que esperar a que esta responda, esto es lo que se busca solventar para los nuevos desarrollos que en nuestra aplicación uno pueda ejecutar un comento y este nos permita hacer otra función mientras que otro proceso esta culminando.

La siguiente tabla muestra las áreas típicas donde la programación asíncrona mejora la capacidad de respuesta. Las API que figuran a partir del Marco. NET 4.5 y el tiempo de ejecución de Windows contienen métodos que admiten la programación asíncrona.

asyn

¿Qué sucede en un método Async

Lo más importante de entender en la programación asincrónica es como el flujo de control pasa de un método a otro. El diagrama siguiente le guía a través del proceso.

Trace un programa async

Los números en el diagrama corresponden a los pasos siguientes.

  1. Un manejador de eventos llama y espera la AccessTheWebAsync método asincrónico.

  2. AccessTheWebAsync crea una HttpClient instancia y llama al GetStringAsync método asincrónico para descargar el contenido de un sitio web como una cadena.

  3. Algo pasa en GetStringAsync que suspende su progreso. Quizá debe esperar a que un sitio web para descargar o alguna otra actividad de bloqueo. Para evitar el bloqueo de recursos, GetStringAsyncrendimientos controlar a su invocador, AccessTheWebAsync .

    GetStringAsync devuelve una Tarea < TResult > donde TResult es una cadena, yAccessTheWebAsync asigna la tarea al getStringTask variable. La tarea representa el proceso en curso para la llamada a GetStringAsync , con el compromiso de producir un valor de cadena real cuando el trabajo se haya completado.

  4. Debido getStringTask no ha sido todavía esperaba, AccessTheWebAsync puede continuar con otros trabajos que no depende del resultado final de GetStringAsync . Ese trabajo está representado por una llamada al método sincrónico DoIndependentWork .

  5. DoIndependentWork es un método sincrónico que hace su trabajo y regresa a su invocador.

  6. AccessTheWebAsync se ha quedado sin trabajo que se puede hacer sin un resultado degetStringTask . AccessTheWebAsync siguiente quiere calcular y devolver la longitud de la cadena descargado, pero el método no puede calcular ese valor hasta que el método tiene la cadena.

    Por lo tanto, AccessTheWebAsync utiliza un operador de esperar a suspender su progreso y para ceder el control al método que se llama AccessTheWebAsync . AccessTheWebAsync devuelve unTask (Of Integer) o <int> tarea a la persona que llama. La tarea representa una promesa para producir un resultado entero que es la longitud de la cadena descargado.

    Nota Nota

    Si GetStringAsync (y por lo tanto getStringTask ) se ha completado antes deAccessTheWebAsync la espera, el control permanece en AccessTheWebAsync . El gasto de suspensión y luego regresar a AccessTheWebAsync se perdería si el proceso llamado asíncrono (getStringTask ) ya ha completado y AccessTheWebSync no tiene que esperar a que el resultado final.

    Dentro de la persona que llama (el controlador de eventos en este ejemplo), el proceso se repite. La persona que llama puede hacer otro trabajo que no depende del resultado de AccessTheWebAsyncantes de esperar el resultado, o la persona que llama puede esperar de inmediato. Cuando el controlador de eventos alcanza una espera de expresión, la aplicación se centra en la realización deGetStringAsync . El controlador de eventos está esperando AccessTheWebAsync yAccessTheWebAsync está esperando GetStringAsync .

  7. GetStringAsync completa y produce un resultado cadena. La cadena resultante no es devuelto por la llamada a GetStringAsync en la forma en que se podría esperar. (Recuerde que el método ya volvió una tarea en el paso 3.) En cambio, la cadena resultado se almacena en la tarea que representa la realización del método, getStringTask . La espera de operador recupera el resultado degetStringTask . La sentencia de asignación asigna el resultado a recuperar urlContents .

  8. Cuando AccessTheWebAsync tiene el resultado de cadena, el método puede calcular la longitud de la cadena. Entonces el trabajo de AccessTheWebAsync también es completo, y el controlador de eventos puede reanudar espera. En el ejemplo completo en el final del tema, se puede confirmar que el controlador de eventos recupera e imprime el valor del resultado longitud.

  9. Acá les dejo para mas información de las palabras reservadas.

Async , async , aguardan y esperan son palabras claves contextuales. Para obtener más información y ejemplos, vea los siguientes temas:

Autor: Ing. Javier J. Leal H.

Desarrollador en CPANAX C.A, Microsoft Student Partners de Venezuela Amantes de nuevas Tecnologías Desarrollador es Silverlight 5, Windows 8, Windows Phone, Influenciador y Orador en Actividades Tecnológicas Microsoft

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s