2012-12-07 40 views
1

我有一个循环中至极我有使用套接字我应该在套接字和另一个套接字之间使用Thread.Sleep吗?

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是我存储所有数据,以接收N字节的数据。

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

+2

请注意,数据也会在较低的抽象级别进行缓冲,这样可能会阻止您一次获取过多的少量数据。 – Servy

回答

4

有没有必要睡觉 - socket.Receive调用将阻塞,直到数据可用。

relevant MSDN page

...如果没有数据可供读取,Receive方法将阻塞,直到 数据可用...

1

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

相关问题