2011-11-16 8 views
5

Al llamar a BeginInvoke en un delegado, la acción se ejecuta en un hilo separado. Si se llama en ASP.NET ¿utiliza un hilo de trabajo CLR? ¿O usa un hilo de trabajo IIS?usando delegados en ASP.NET para manejar operaciones asincrónicas

En este último caso, tendré que emplear un patrón ASP.NET asíncrono para garantizar que la acción se ejecute en un hilo de trabajo CLR. Pero preferiría no hacerlo si la acción termina allí con BeginInvoke.

Respuesta

6

utiliza un hilo de trabajo CLR.

como se describe en here

Para empezar, ASP.NET utiliza el grupo de subprocesos CLR en todo el proceso de solicitudes de servicio (para obtener más antecedentes sobre el grupo de subprocesos CLR, consulte la columna de .NET en este tema)

EDIT:

otro recurso es this blog

Por desgracia, el hilo utilizado por BeginInvoke se toma realmente en el grupo de subprocesos mismo trabajador que es utilizado por ASP.Net para manejar solicitudes de páginas

+0

Gracias. MVC admite un modelo asincrónico. Parece que si aprovecho eso junto con la técnica BeginInvoke, mi página volverá rápido y el trabajo no ocupará un hilo de trabajo de IIS. ¿Correcto? –

+0

Al volver a leer esa publicación de blog, simplemente puedo hacer una técnica de Thread.Start(). Para mi aplicación, no tendré el riesgo de que ocurran más de un puñado de estos procesos a la vez (generalmente solo 1), por lo que es probablemente la solución más fácil/más sostenible en este punto para mis necesidades. Para cualquier persona que lo siga, busque en la publicación del blog la frase "Bien, usaré Thread.Start() y crearé mi propio hilo". –

+0

@John Sí, tienes razón. si solo quieres devolver la página rápido, sin que el usuario sepa los resultados, es bueno. pero no mejorará el rendimiento. – Mithir

1

El uso/administración de subprocesos es un poco diferente en IIS6, IIS7 e IIS 7.5.

Bastante detalles y explicaciones actualizada aquí:

ASP.NET Thread Usage on IIS 7.5, IIS 7.0, and IIS 6.0

No estoy seguro si esto responde a su pregunta, pero una buena lectura de todos modos.

1

El uso de un delegado personalizado y la invocación de su método BeginInvoke ofrecen una forma rápida de desactivar subprocesos de trabajo para su aplicación. Desafortunadamente, perjudican el rendimiento general de su aplicación, ya que consumen subprocesos del mismo grupo utilizado por ASP.NET para gestionar las solicitudes HTTP.

Recuerde también que si la devolución de llamada del método Asíncrono es importante, debe bloquear el hilo principal para que no vuelva al cliente hasta que se complete el proceso asincrónico. Si el registro y el análisis son una llamada al método de "fuego y olvídate", entonces las cosas son más fáciles y puedes simplemente disparar el método y permitir que el servidor responda al cliente. Sin embargo, si la devolución de llamada es importante y el servidor ha completado el procesamiento, no ocurre nada en el servidor para manejar la devolución de llamada una vez que se haya completado; aquí es donde el procesamiento asincrónico en el servidor para las aplicaciones ASP.NET difiere de, por ejemplo, una aplicación WinForms.

Cuestiones relacionadas