2010-11-27 5 views
5

У меня есть нить, которая ждет на TcpListener.AcceptTcpClient(), которая блокирует, которую я хочу временно приостановить.Как приостановить блокирующий поток без устаревшего Thread.Suspend?

Я читал о Monitor.Wait(...), но у меня есть опыт работы с мьютексами, и если поток ждет блокирующего метода, он становится интересным.

Теперь, когда Thread.Suspend(...) устарел, как я должен приостановить поток?

+1

Если поток уже заблокирован, тогда нет смысла его приостанавливать. Не могли бы вы рассказать. – 2010-11-27 09:25:54

+0

Хорошо, я понимаю, что вы имеете в виду. Я не хочу, чтобы поток потреблял любые входящие TCP-соединения и не использовал никаких ресурсов, когда я «приостанавливаю» его. Если это уже так, установит флаг «приостановлено» и ждет его после того, как «AcceptTcpClient» вернется в путь? – 2010-11-27 09:55:58

ответ

2

Это невозможно, это состояние неразрешимой гонки. Слушатель мог принять соединение через микросекунду, прежде чем вы захотите ее приостановить. Закрытие слушателя, чтобы он не принимал никаких соединений, является единственным верным способом.

Переосмыслите свою логику здесь. Независимо от того, что это будет делать с этим соединением, из-за которого вы хотите остановить его, вероятно, необходимо заблокировать его.

Смежные вопросы