remarks - see cref c#
Diferencia de rendimiento entre el controlador HTTP sÃncrono y el controlador HTTP asÃncrono (2)
¿Hay una diferencia de rendimiento entre el controlador HTTP síncrono y el controlador HTTP asíncrono? IHttpHandler vs IHttpAsyncHandler
¿Por qué elegir uno sobre otro?
¿Cuales son los beneficios?
ASP.NET utiliza el grupo de subprocesos para procesar las solicitudes HTTP entrantes.
Cuando se llama a un IHttpHandler, se utiliza un hilo del grupo de subprocesos para ejecutar esa solicitud y el mismo subproceso se utiliza para procesar toda la solicitud. Si esa solicitud llama a una base de datos u otro servicio web o cualquier otra cosa que pueda llevar tiempo, el hilo del grupo de subprocesos espera. Esto significa que los hilos del grupo de subprocesos pasan tiempo esperando cosas cuando podrían usarse para procesar otras solicitudes.
Por el contrario, cuando se trata de un IHttpAsyncHandler, existe un mecanismo para permitir que la solicitud registre una devolución de llamada y devuelva el subproceso del grupo de subprocesos al grupo antes de que la solicitud se procese por completo. El subproceso de grupo de subprocesos comienza a procesar algo para la solicitud. Probablemente llama a algún método asíncrono en una llamada a la base de datos o servicio web o algo así y luego registra una devolución de llamada para que ASP.NET llame cuando esa llamada regrese. En ese momento, el hilo del grupo de subprocesos que estaba procesando la solicitud HTTP se devuelve al grupo para procesar otra solicitud HTTP. Cuando la llamada a la base de datos o lo que sea vuelve, ASP.NET desencadena la devolución de llamada registrada en una nueva cadena de subprocesos. El resultado final es que no tiene subprocesos de grupo de subprocesos esperando en operaciones de E / S vinculadas y puede usar su grupo de subprocesos de manera más eficiente.
Para aplicaciones de concurrencia muy alta (cientos o miles de usuarios verdaderamente simultáneos), IHttpAsyncHandler puede proporcionar un gran impulso en concurrencia. Con un menor número de usuarios, aún puede haber un beneficio si tiene solicitudes de ejecución muy larga (como una solicitud de larga duración). Sin embargo, la programación bajo el IHttpAsyncHandler es más complicada, por lo que no debe usarse cuando realmente no se necesita.
No hay diferencia de rendimiento aparte de administrar otro hilo.
Sincrónico es más fácil de codificar. Envía la solicitud y el hilo se congela hasta que se devuelva la respuesta. Entonces puede manejar la respuesta y los errores en el mismo método. Es fácil de leer y depurar. Si ejecuta este código en la secuencia de la GUI, Windows puede informar que su programa "no responde" si no recibe una respuesta rápidamente.
Use Asincrónico si no desea que su hilo se congele. El usuario puede continuar interactuando con el programa mientras una tarea en segundo plano espera la respuesta HTTP. Luego debe escribir el código para administrar la tarea en segundo plano, ver cuándo se completa, manejar los errores, pasar estos errores al hilo de la GUI, etc. Es un poco más trabajo, y mucho más difícil de leer y depurar, pero en última instancia un producto de mejor calidad si se hace correctamente.
Editar: se corrigió que los métodos sincrónicos congelan el hilo, no necesariamente todo el programa.