La meilleure façon d'attendre que les données TcpClient soient disponibles?
while (TcpClient.Client.Available == 0)
{
Thread.Sleep(5);
}
Est-il une meilleure façon de le faire?
source d'informationauteur Jader Dias
Vous devez vous connecter pour publier un commentaire.
Absolument! Appelez simplement
Read(...)
sur le stream. Qui permet de bloquer jusqu'à ce que les données sont disponibles. Sauf si vous avez vraiment ont d'utiliser leTcpClient
directement, je serais normalement en faire autant que possible sur le cours d'eau. Si vous souhaitez utiliser la douille, il suffit d'appelerReceive(byte[])
qui permet de bloquer jusqu'à ce que les données sont disponibles (ou le socket est fermé).Maintenant, si vous ne voulez pas bloquer, vous pouvez utiliser
Stream.BeginRead
ouSocket.BeginReceive
à travailler de manière asynchrone. (OuReadAsync
comme de .NET 4.5.)Personnellement, je trouve
Available
être assez inutile (sur les deux ruisseaux et les sockets) et en boucle autour d'un sommeil est certainement inefficace - vous ne voulez pas avoir à changer le contexte du thread lorsque les données n'est pas venu, et vous ne voulez pas avoir à attendre le sommeil pour terminer lorsque les données a venir.