Una de las cosas que definitivamente más me gustan de programar en .NET es el modelo asíncrono de desarrollo. No solo es una técnica para poder ejecutar tareas en segundo plano, es todo un planteamiento a la hora de diseñar el comportamiento de nuestras aplicaciones. Da más escalabilidad que el modelo multithreading tradicional y sobre todo deja un código más claro (a mi gusto claro
). Atrás quedan aquellas largas líneas con ParameterizedThreadStart, los objetos Thread, los eventos para devolver resultados y otras perlas que hacian un poco tediosa la programación multihilo tan necesaria cuando trabajamos con máquinas SMP ó/y cuando hacemos uso de recursos con una latencia considerable.
Como no puedo ni extender ni completar más la excelente documentación sobre el tema que existe en MSDN, escribiré una serie de artículos con pequeños ejemplos explicados, que muestren la sencillez del proceso y los truquillos que he ido aprendiendo con el tiempo. Colgaré aquí también los proyectos comprimidos en .Zip para quien lo quiera descargar. Si necesitais una explicación más profunda sobre el tema teneis un excelente artículo en MSDN titulado Llamar a métodos sincrónicos de forma asincrónica.
En este primer ejemplo, mostraré lo básico, como llamar a una función de forma asíncrona y obtener un resultado de salida.
|
// Declaro el delegado private delegate void AsyncCallOut_(string p1, int p2, out StringBuilder parametroSalida); /// <summary>
} /// <summary>
} /// <summary>
} |
El resultado del ejemplo, podría ser este:
|
Prueba 1.0 en AsyncFuncOut. Prueba 1.1 en AsyncFuncOut. Prueba 1.2 en AsyncFuncOut. Prueba 1.3 en AsyncFuncOut. Prueba 1.4 en AsyncFuncOut. Fin de AsyncFunc con resultado: ‘Prueba 1.1 en AsyncFuncOut.’ con objectState : ‘objectstate_1′ Fin de AsyncFunc con resultado: ‘Prueba 1.3 en AsyncFuncOut.’ con objectState : ‘objectstate_3′ Fin de AsyncFunc con resultado: ‘Prueba 1.0 en AsyncFuncOut.’ con objectState : ‘objectstate_0′ Fin de AsyncFunc con resultado: ‘Prueba 1.2 en AsyncFuncOut.’ con objectState : ‘objectstate_2′ Fin de AsyncFunc con resultado: ‘Prueba 1.4 en AsyncFuncOut.’ con objectState : ‘objectstate_4′ |
Para la siguiente entrega, mostraré como trabajar con los objetos IAsyncResult y controlar el flujo de hilos asíncronos.







[...] en: Modelo Asíncrono, Recurso MSDN, .NET, C# — vtortola @ 4:36 pm Como continuación de Modelo Asíncrono. Parte I, invocación, hoy ejemplificaré como controlar el flujo de operaciones asincrónas asegurando el que no haya [...]
Pingback por Modelo Asíncrono. Parte II, control. « WhatTheFuckException was thrown — Abril 29, 2007 @ 5:03 pm