while (TcpClient.Client.Available == 0)
{
Thread.Sleep(5);
}
これを行うより良い方法はありますか?
絶対!Read(...)
ストリームで呼び出すだけです。データが利用可能になるまでブロックされます。本当に直接使用する必要がTcpClient
ない限り、通常は可能な限りストリームで行います。ソケットを使用したい場合は、Receive(byte[])
データが利用可能になるまで (またはソケットが閉じられるまで) ブロックするだけを呼び出します。
ブロックしたくない場合は、Stream.BeginRead
orSocket.BeginReceive
を使用して非同期で作業できます。(またはReadAsync
.NET 4.5 以降。)
私は個人的Available
に(ストリームとソケットの両方で)ほとんど役に立たないことを発見し、スリープでループすることは間違いなく非効率的です-データが入っていないときにスレッドをコンテキストスイッチする必要はなく、そうしませんデータが入ってきたときにスリープが終了するのを待たなければならない.