Hola todos/as;
Hace unos días expuse unas cuestiones sobre este tema y no recibí respuesta
(entiendo que es un tema un tanto complejo). Me vaís a permitir que lo
vuelva a exponer a ver si hay más suerte :)
Tengo varias dunas serias dudas con respecto a la programación asíncrona y
paso a exponerlas:
PRIMERA CUESTIÓN:
En una implementación de una llamada asíncrona a un método (por parte del
cliente), qué cumple los requisitos [OneWay], es necesario e imprescindible
llamar a "EndInvoke".
Es decir, al márcar dicho método con el atributo [OneWay] no necesitamos
esperar nada, ni atrapar ninguna excepción
Ejemplo:
Clase Servidora:
Método --> public void MiMetodo( string cadena ) {}
Delegado --> public delegate void AsyncDlgt( string cadena );
Clase Cliente:
Instancia Clase Servidora --> CS
Delegado --> AsyncDlgt dlgt = new AsyncDlgt( CS.MiMetodo);
Llamada asincrona --> dlgt.BeginInvoke("Prueba", null, null)
No se proporciona "AsyncCallback", ni "objeto state", ya que, como he
comentado, no se necesita procesar devolución ni gestión de excepciones.
1.- ¿Es correcto este enfoque en este caso?. La idea es que no entorpezca
para nada un proceso intenso principal.
2.- ¿Se libera correctamente el subproceso iniciado con la llamada si no se
realiza el paso comentado?
3.- ¿El mero hecho de marcar con el atributo [OneWay] (cumpliendo los
requisitos) a un método le supone ejecución asíncrona de manera transparente
para el llamante (como parece que pasa con la llamada a un método de un
objeto remoto)?
3. - Valdría también para la generación de un evento de forma asíncrona (el
método manejador con el atributo [OneWay]).
¿Qué mecanismo existen (o cómo se puede realizar) un lanzamiento de evento
asíncrono, es decir, lanzarlo pero sin tener que esperar a que se procese
para seguir la ejecución.
SEGUNDA CUESTION:
He intentado dar soporte asíncrono a un método de una clase sencilla, pero
no acabo de encontrar un ejemplo sencillo de clase servidora con métodos
asíncronos y ejemplo de cómo llamarlos desde un cliente
Agradecería enormente unos sencillos ejemplos, ya que no los encuentro.
TERCERA CUESTIÓN Y ÚLTIMA.
Tengo dudas a nivel conceptual con los subprocesos y escalabilidad de las
aplicaciones que utilizan la arquitectura asíncrona. Y me explico:
Cuando se realiza una llamada a un método asíncrono se libera el subproceso
llamante y se genera uno nuevo del grupo de procesos de sistema
"ThreadinPool".
Según tengo entendido este Pooll maneja como máximo 25 subprocesos.
¿Quiere decir esto que no se podría estar atendiendo de manera asíncrona más
de 25 peticiones?
¿Cómo escalaría este enfoque asíncrono del de generar una hebra de ejecución
por cada subproceso?
Digamos para un servicio que debe atender a cientos o miles de peticiones de
manera intensiva.
Pido disculpas por la extensión del mensaje, y espero me podáis ayudar a
aclararme con mis incipientes dudas.
Saludos:
Mario Barro.
Leer las respuestas