2010-11-27 24 views
5

Tengo un hilo que espera en TcpListener.AcceptTcpClient(), que bloquea, que quiero suspender a veces.Cómo suspender un hilo de bloqueo sin Thread.Suspend obsoleto?

He leído sobre Monitor.Wait(...), pero solo tengo experiencia trabajando con mutexes y si el hilo espera en un método de bloqueo, se vuelve interesante.

Ahora que Thread.Suspend(...) está obsoleto, ¿cómo debo suspender el hilo?

+1

Si el hilo ya está bloqueado, no tiene sentido suspenderlo. ¿Podrías por favor dar más detalles? –

+0

Bien, entiendo a qué se refiere. No quiero que el hilo consuma ninguna conexión TCP entrante y no use ningún recurso cuando lo "suspenda". Si este es el caso, ¿sería correcto establecer un indicador 'suspendido' y esperar después de que 'AcceptTcpClient' regrese? –

Respuesta

2

Esto no es posible, es una condición de carrera insoluble. El oyente podría haber aceptado una conexión un microsegundo antes de querer suspenderla. Cerrar el oyente para que no acepte ninguna conexión es la única forma segura.

Repiense su lógica aquí. Lo que sea que vaya a hacer con esa conexión que hace que quieras detenerlo, probablemente deba bloquearse.

+0

Resuelto al deshacerse del hilo y usar el 'BeginAcceptTcpClient' asincrónico. –

Cuestiones relacionadas