Jad*_*ias 11 .net c# tcpclient
while (TcpClient.Client.Available == 0)
{
Thread.Sleep(5);
}
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
Jon*_*eet 26
绝对!只需呼叫Read(...)流.这将阻止数据可用.除非你真的必须TcpClient直接使用,我通常会在流上做尽可能多的事情.如果你想使用套接字,只需调用Receive(byte[])哪个将阻塞,直到数据可用(或套接字关闭).
现在,如果您不想阻止,可以使用Stream.BeginRead或Socket.BeginReceive异步工作.(或者ReadAsync从.NET 4.5开始.)
我个人发现Available它几乎没用(在流和套接字上)并且循环使用睡眠肯定是低效的 - 你不希望在数据没有进入时上下文切换线程,而你没有希望有等待睡眠时的数据来完成已经进来了.