2009-07-21 43 views

回答

21

绝对!只需在流上拨打Read(...)即可。这将阻止,直到数据可用。除非你真的直接使用TcpClient,否则我通常会尽可能在流上做。如果你想使用套接字,只需调用Receive(byte[]),这将阻塞,直到数据可用(或套接字关闭)。

现在,如果您不想阻止,则可以使用Stream.BeginReadSocket.BeginReceive异步工作。 (或者ReadAsync作为.NET 4.5)

我个人觉得Available是几乎无用的(在两个流和插座)和循环一轮睡眠肯定是低效率的 - 你不希望有上下文切换当数据尚未进入时线程,并且当数据进来时,您不希望等待睡眠完成。

+0

使用StreamReader.ReadToEnd()也应该工作吗? – 2009-07-21 13:44:37