2012-12-07 72 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到達,並且它將阻塞準確的時間長度。增加睡眠毫無意義。

相關問題