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

时间:2009-07-21 13:40:10

标签: c# .net tcpclient

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

有更好的方法吗?

1 个答案:

答案 0 :(得分:26)

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

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

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

相关问题