Абсолютно! Просто позвоните Read(...)
в потоке. Это будет блокировать, пока данные не будут доступны. Если у вас действительно нет для непосредственного использования TcpClient
, я бы обычно делал как можно больше в потоке. Если вы хотите использовать сокет, просто наберите Receive(byte[])
, который будет блокировать, пока данные не станут доступны (или сокет не будет закрыт).
Теперь, если вы не хотите блокировать, вы можете использовать Stream.BeginRead
или Socket.BeginReceive
для асинхронной работы. (Или ReadAsync
по состоянию на .NET 4.5.)
Лично я нахожу Available
бесполезным (как для потоков, так и для сокетов), и циклический переход в спящий режим определенно неэффективен - вам не нужно переключать контекст, когда поток данных не поступает и вам не нужно ждать окончания сна, когда данные имеют .