asp.net io delegates task-parallel-library datareader

Hilos vs TPL vs Async Delegados en ASP.NET



io delegates (2)

¿Debería haber usado Threads o Delegados asincrónicos en su lugar?

Aparentemente, su operación de hilo de fondo abarca los límites de una sola solicitud HTTP. En este caso, realmente no importa qué API use para ejecutar dicha operación: Task.Run , Delegate.BeginInvoke , ThreadPool.QueueUserWorkItem , new Thread o cualquier otra cosa.

No debe ejecutar una operación larga de subprocesos en segundo plano, cuya duración abarca varias solicitudes HTTP dentro del espacio de direcciones ASP.NET. Si bien es relativamente fácil de implementar, este enfoque puede tener problemas con la capacidad de mantenimiento, la escalabilidad y la seguridad de IIS. Cree un servicio WCF para eso y llámelo desde su página ASP.NET:

Cómo: alojar un servicio WCF en un servicio administrado de Windows .

Tengo una aplicación que funciona bien en producción, pero me pregunto si podría haber implementado la concurrencia mejor ...

ASP.NET .NET 4, C #

Básicamente, genera n cantidad de sentencias sql sobre la marcha (aproximadamente 50 en este momento) y luego las ejecuta al mismo tiempo y escribe los datos en archivos .csv.

EDITAR: Primero creo un hilo para hacer todo el trabajo para que la solicitud de página pueda regresar. Luego en ese hilo ...

Para cada una de las sentencias de SQL, creo una Tarea nueva usando el TPL y la ejecuto usando un lector de datos y escribo los datos en el disco. Cuando se crea el último archivo, escribo algunos datos de resumen en un archivo de resumen, lo comprime y se lo entrego al usuario.

¿Debería haber usado Threads o Delegados asincrónicos en su lugar?

No he publicado el código ya que realmente me pregunto si mi enfoque general (es decir, TPL) es la mejor opción en esta situación.

Por favor, no me hable sobre la creación de sql dinámico, es totalmente necesario debido a los aspectos técnicos de la base de datos que estoy leyendo y no relevante para la pregunta. (Es el back-end de un sistema patentado. Tiene más de 7 mil tablas).


Si iniciamos un nuevo hilo en ASP.Net desde el hilo que está sirviendo a la solicitud http, y el nuevo hilo tiene una excepción no controlada, el proceso de trabajo se bloqueará inmediatamente. Incluso si usamos el servicio WCF y lo llamamos desde ASP.Net, el hilo ASP.Net esperará el resultado. Así que es mejor usar cualquier mecanismo de cola para que las solicitudes estén en cola y la cola pueda procesarse en un tiempo diferente en función de la capacidad de procesamiento. Por supuesto, cuando decimos hacer cola, debemos pensar en la falla de la cola, la repetición, etc ... Pero vale la pena si la aplicación es grande y necesita escalar.