2009-07-21 70 views

回答

21

絕對!只需在流上撥打Read(...)即可。這將阻止,直到數據可用。除非你真的直接使用TcpClient,否則我通常會盡可能在流上做。如果你想使用套接字,只需調用Receive(byte[]),這將阻塞,直到數據可用(或套接字關閉)。

現在,如果您不想阻止,則可以使用Stream.BeginReadSocket.BeginReceive異步工作。 (或者ReadAsync作爲.NET 4.5)

我個人覺得Available是幾乎無用的(在兩個流和插座)和循環一輪睡眠肯定是低效率的 - 你不希望有上下文切換當數據尚未進入時線程,並且當數據進來時,您不希望等待睡眠完成。

+0

使用StreamReader.ReadToEnd()也應該工作嗎? – 2009-07-21 13:44:37