等待TcpClient数据可用的最佳方法?
while (TcpClient.Client.Available == 0) { Thread.Sleep(5); }
有一个更好的方法吗?
绝对! 只需在流上调用Read(...)
。 这将阻止数据可用。 除非你真的必须直接使用TcpClient
,否则我通常会在流上尽可能多地使用它。 如果要使用套接字,只需调用Receive(byte[])
,它将阻塞直到数据可用(或套接字关闭)。
现在,如果您不想阻止,可以使用Stream.BeginRead
或Socket.BeginReceive
异步工作。 (或.NET 4.5中的ReadAsync
。)
我个人认为Available
非常无用(在流和套接字上都是这样)并且循环使用睡眠效率肯定是低效的 – 你不希望在数据没有进入时上下文切换线程,你不要我希望在数据进入时等待睡眠结束。