Да, это нормально, чтобы закрыть поток на другой поток, но помните о последствиях этого. Если вы это сделаете, а другой поток использует этот поток, вы получите исключение. Правильное дело - иметь либо событие, либо дескриптор ожидания, что поток, выполняющий чтение, может проверить, должен ли он закрыться. Псевдокод будет выглядеть примерно так: Тема 1. отложить операцию чтения и посмотреть, есть ли данные для чтения.
если данные, прочитайте некоторые данные. если нет, продолжите проверьте ручку ожидания. Если он установлен, закройте его и завершите в противном случае прочитайте еще loop
Тема 2. Если я должен отключить сеть, сообщите, что команда wait еще делает что угодно.
Помните, что если вы находитесь в режиме блокировки, вы получите исключение. Я НИКОГДА НЕ рекомендую использовать блокирующий сокет, нет причин. Мы фактически выполняем (почти) все наши операции async под капотом System.Net, а пути кода синхронизации просто запускают путь к асинхронному коду, а затем блокируются до их завершения.
уверен, что вы можете сделать только шаг 2, если вам удастся контролировать оба конца соединения сокета, что редко. –
@Mark: Правильно, ну, на самом деле это предполагает, что вы можете писать в поток с той же стороны, что и вы, слушая ... Я мог бы обедать на этом ... –