2011-01-02 13 views
7

Necesito una explicación con respecto a algunos consejos que obtuve en este sitio. Estoy haciendo una aplicación de envío de boletines, y mi correo enviado en un hilo separado para que el proceso no ralentice todo el sitio web. Un par de personas me aconsejaron establecer la propiedad IsBackground de subprocesos en verdadero. Hice esto, pero también fue cómico sobre lo que esto hace, así que busqué en Google un poco. Como resultado, establecer la propiedad IsBackground en true indica que "está bien si el proceso se cierra mientras este hilo todavía se está ejecutando".. O como dice microsoft "Los hilos de fondo restantes se detienen y no se completan".Establecer el hilo como fondo o no

No sé si lo hice de forma incorrecta pero, ¿no sería mejor dejar la propiedad IsBackground en falso para que el subproceso generado pueda completar su trabajo con respecto al hilo principal?

+0

¿Cómo/a dónde envía los correos electrónicos? – SLaks

+0

del sitio web, creo mailmessage y objeto smtpclient e itero a través de correos electrónicos de db y los envío uno por uno – Andrej

Respuesta

5

Si establece "IsBackground = true", está marcando el hilo como no esencial, por lo que si desea completar su trabajo de fondo aunque el sitio se caiga, creo que su intuición es correcta, déjela como "IsBackground" = falso ".

Esto no es infalible; el hilo generado sigue siendo un elemento secundario del hilo principal, por lo que dependiendo de cómo el sitio se caiga, aún puede hacer que todo el proceso sea derrotado. Si realmente desea asegurarse de que su trabajo pueda completarse sin importar lo que ocurra con el sitio, debería pensar en extraerlo en su propio proceso, como un servicio WCF.

0

Parece que esta discusión tiene algo similar a:

while(true) 
{ 
    //do something 
} 

Si este hilo no se interrumpirá cuando el proceso intenta ir por el proceso permanecerá hasta (A menos que se mata a la fuerza).
Por otro lado, un hilo de fondo se cancelará automáticamente cuando todos los hilos de primer plano del proceso se cayeron.

+0

sí, envía correos electrónicos MIENTRAS hay correos electrónicos en la matriz (usando el ciclo while) ... así que si no lo hago establecer la propiedad IsBackground en verdadero, ¿seguirá ejecutándose cuando termine el ciclo? – Andrej

+0

No, cuando el método que pasaste a Thread.Start sale, el hilo también sale. –

Cuestiones relacionadas