2012-01-10 22 views
9

He intentado buscar en Google sobre este tema, pero me gustaría tener más información.¿Cuándo eliminará ASP.NET un nuevo hilo?

Estoy tratando de iniciar un nuevo hilo dentro de una aplicación ASP.NET que se encargará de un trabajo que lleva mucho tiempo. Si pongo esto en mi web.config:

<httpRuntime executionTimeout="5" /> 

Una solicitud regular tendrá un tiempo de espera después de 5 segundos. Recuerde que esto es para probar. Cuando comienzo un nuevo hilo a partir del código:

var testThread = new Thread(new ThreadStart(CustomClass.DoStuffThatTakesLongTime)); 
    testThread.Start(); 

Este hilo tendrá una duración de más de 5 secounds, eso es lo que quiero. PERO. Por cuanto tiempo corre? Digamos que este hilo toma 5 horas (solo como un ejemplo). ¿Cuándo se matará el hilo? ¿Funcionará hasta que se recicle el grupo de aplicaciones? ¿O hay algo más que mata este hilo?

+0

Pruébelo, vea lo que sucede. (Deje que el nuevo subproceso escriba la hora en un archivo de texto o más) EDITAR: compruebe si hay alguna diferencia entre utilizar el subproceso y la tarea. – ZippyV

+0

Eso es querer, pero me gustaría algo más de comprensión. El hilo se cierra para funcionar, pero me gustaría saber más sobre qué podría salir mal y qué buscar. –

Respuesta

9

ASP.NET no tiene conocimiento del hilo que ha creado; se ejecutará hasta que se haya reciclado o completado la AppPool.

Desde ASP.Net no tiene conocimiento de este hilo sin embargo, podría ser abortado abruptamente en cualquier momento si el servidor piensa que debería reciclar el AppPool, esto no sería una buena cosa! Phil Haack wrote a blog post sobre cómo suscribirse al evento 'AppDomainIsGoingDown'.

En cuanto a lo que puede causar esto, me gustaría recomendar la lectura de este blog post by Tess Ferrandez, pero en pocas palabras que son:

  • Se ha previsto que lo hiciera
  • de Machine.Config, Web .config o Global.asax se modifican
  • el directorio bin o su contenido se modifica
  • el número de re-compilaciones (aspx, ascx o asax) excede el límite especificado por la configuración en machine.config o web.config (de forma predeterminada se establece en 15)
  • la ruta física del directorio virtual se modifica
  • La política CAS se modifica
  • El servicio web se reinicia
  • (2.0 solamente) Aplicación subdirectorios se eliminan
+0

Eso significa que este hilo "exemple" se ejecutará durante 5 h. ¿GC se encargará de cosas cuando el hilo se complete o necesito liberar recursos de alguna manera? –

+1

@MarkusKnappenJohansson El subproceso se ejecutará hasta que se complete o la AppPool se apague. Todos los recursos adquiridos durante la vida útil del subproceso se gestionan, todos los GC necesarios se seguirán realizando. –

+0

Entonces Sobre el hecho de que el hilo podría ser abortado por el servidor. ¿Esto sucedería si el hilo funciona con algo? ¿O solo si está inactivo? ¿Hay alguna forma de "proteger" contra esto? –

Cuestiones relacionadas