我应该在套接字接收和另一个之间使用Thread.Sleep吗?

时间:2012-12-07 15:31:35

标签: c# sockets thread-sleep

我有一个循环,我必须使用套接字

接收N个字节的数据
int bytesRead = 0;
int offset = 0;

do
{
    var buffer = new byte[N - offset];
    bytesRead = socket.Receive(buffer, 0, buffer.Length, SocketFlags.None);
    Buffer.BlockCopy(buffer, 0, packet.Buffer, offset, bytesRead);
    offset += bytesRead;

    // Thread.Sleep(How much have I to sleep?);
}
while (offset < N);

packet.Buffer是存储所有数据的地方。

我应该在套接字接收之间使用Thread.Sleep来等待足够的数据到达吗?如果是,多少毫秒?

2 个答案:

答案 0 :(得分:4)

无需睡眠 - socket.Receive调用将阻止,直到数据可用。

来自relevant MSDN page

  

...如果没有可用于读取的数据,Receive方法将被阻止   直到数据可用......

答案 1 :(得分:1)

绝对不是。这实际上是浪费时间。接收将阻塞,直到数据或EOS到达,并且它将阻塞正确的时间长度。加入睡眠毫无意义。