Как закрыть заблокированную розетку - PullRequest
4 голосов
/ 24 августа 2010

Служба Windows имеет открытый сокет, который получает данные (в отдельном потоке)

В ответ на службу OnShutdown Я хотел бы дать сигнал рабочему потоку о завершении работы, но в данный момент он заблокирован на Receive.

В данный момент я тайм-аут на Receive, чтобы проверить, есть ли ожидающий запрос на остановку. Есть ли лучший подход, вместо ожидания тайм-аута, чтобы уведомить рабочий поток о прекращении приема и прохождении логики завершения работы?

Ответы [ 2 ]

2 голосов
/ 25 августа 2010

Звоните Socket.Close. Это приведет к тому, что метод Socket.Receive сгенерирует исключение, немедленно разблокировав его.

Исключением является IO.IOException, которое имеет SocketException в качестве внутреннего исключения. Собственный код ошибки внутреннего исключения - 10004.

0 голосов
/ 24 августа 2010

Вызов Interrupt () в потоке должен заставить его выйти из любой операции блокировки: http://msdn.microsoft.com/en-us/library/system.threading.thread.interrupt.aspx

Обратите внимание, что это вызовет ThreadInterruptedException (при блокировке), который вы должны обработать соответствующим образом.1005 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...