while (TcpClient.Client.Available == 0)
{
Thread.Sleep(5);
}
有更好的方法吗?
答案 0 :(得分:26)
绝对!只需在流上调用Read(...)
即可。这将阻止数据可用。除非你真的 直接使用TcpClient
,否则我通常会在流上做尽可能多的事情。如果你想使用套接字,只需调用Receive(byte[])
,它将阻塞,直到数据可用(或套接字关闭)。
现在,如果您不想阻止,可以使用Stream.BeginRead
或Socket.BeginReceive
异步工作。 (或者从.NET 4.5开始ReadAsync
。)
我个人认为Available
几乎没用(在流和套接字上都是这样)并且循环使用睡眠肯定是低效的 - 你不希望在数据没有上下文时切换线程进来,当数据 进来时,你不想等待睡眠结束。