等待TcpClient数据可用的最佳方法?

while (TcpClient.Client.Available == 0) { Thread.Sleep(5); } 

有一个更好的方法吗?

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

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

我个人认为Available非常无用(在流和套接字上都是这样)并且循环使用睡眠效率肯定是低效的 – 你不希望在数据没有进入时上下文切换线程,你不要我希望在数据进入时等待睡眠结束。