Pregunta

Tengo una aplicación ASP.Net que dispara a algunos trabajadores que utilizan fondo ThreadPool.QueueUserWorkItem (). La mayoría de las veces no será cero subprocesos en segundo plano que se ejecutan, sin embargo es posible que podría ser occationally hasta 5-6 ejecutar a la vez. Además, la mayoría se completa dentro de un par de segundos, pero es posible que puedan funcionar durante hasta 10 minutos.

Teniendo en cuenta todos los diferentes escenarios que podrían causar el cierre de una aplicación ASP.Net, me gustaría tener estos procesos en segundo plano de salida con gracia, si es posible, cuando las necesidades de la aplicación a un apagado y que están en el medio de procesamiento.

No anticipamos tener demasiado de un problema creando una manera de señalar los procesos de detener su trabajo temprano y limpiar a los pocos segundos de recibir la llamada que la aplicación se está cerrando. Aunque si alguien tiene consejos específicos sobre esta duda me lo agradecerán.

Mis dos preguntas principales son:

1) ¿Cuándo sería el momento adecuado para decirle a los trabajadores de fondo para envolver las cosas. Durante Application_End? Disponer()? O tal vez una tercera opción no estoy al tanto de.

2) Si espero durante el evento anteriormente para los procesos de acabado antes de regresar, ¿hay un punto donde no tener retorno Application_End inmediato podría causar problemas más graves para la aplicación de no haber apagado los trabajos de fondo muy bien.

void Application_End(object sender, EventArgs e) 
{
    //if this for whatever reason takes a non-trivial time to execute, what problems could I encounter? 
    SignalBackgroundJobsAndWaitForThemToShutDown();
}

Gracias!

¿Fue útil?

Solución

El tiempo apropiado está en el Application_End

Ahora, después de que la señal de su trabajos en segundo plano se debe esperar a que en ese punto hasta el final, y luego dejar que continúe, como parece que lo haga.

Tenga en la mía, que es bueno colocar un tiempo de espera en la espera, no espere para siempre o de lo contrario su piscina puede tener problemas, o apagado, entonces usted necesita para comprobar los ajustes de la piscina en la espera máximo para apagar la piscina , no establece un valor mayor que su espera, o simplemente inhabilitado.

También tiene en la mía que si tiene jardín de la piscina, (más de 1 piscinas de trabajo), entonces el Application_End se llama una vez para cada grupo.

Yo uso la misma técnica en mis sitios, del mismo modo señal I mis hilos para detener la misma manera, acabo también registrará el fin último, y comprobar cuando están fin último, y también me fuerzo a mis rutinas para detener y no dejar correr el tiempo para muchos. El Application_End se llama el reciclaje de la piscina, o cuando se abre el archivo app_offline.htm, o cuando se va a cerrar el servicio web. Personalmente tengo desactivar los reciclajes, no necesito de ellos y sólo abrir la app_offline.htm cuando hago cambios. En ese momento espero mis subprocesos de grupo para detener su trabajo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top