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