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

これを行うより良い方法はありますか?

4

1 に答える 1

27

絶対!Read(...)ストリームで呼び出すだけです。データが利用可能になるまでブロックされます。本当に直接使用する必要TcpClientない限り、通常は可能な限りストリームで行います。ソケットを使用したい場合は、Receive(byte[])データが利用可能になるまで (またはソケットが閉じられるまで) ブロックするだけを呼び出します。

ブロックしたくない場合は、Stream.BeginReadorSocket.BeginReceiveを使用して非同期で作業できます。(またはReadAsync.NET 4.5 以降。)

私は個人的Availableに(ストリームとソケットの両方で)ほとんど役に立たないことを発見し、スリープでループすることは間違いなく非効率的です-データが入っていないときにスレッドをコンテキストスイッチする必要はなく、そうしませんデータが入ってきたときにスリープが終了するのを待たなければならない.

于 2009-07-21T13:42:18.333 に答える