networkStream.Read está bloqueando

Estoy escribiendo una aplicación simple que se conectará con un servidor. Sin embargo, también quiero enviar comandos de chat simples (verConsole.ReadLine abajo). Sin embargo, este script no llegará astring Message = Console.ReadLine(); ya que está bloqueado enbytesRead = clientStream.Read(message, 0, 4096);.

Quiero continuar con este script, pero si hay bytes entrantes, debería procesarlos (como lo está haciendo ahora) y si no hay bytes entrantes, debería pasar por el script y esperar la entrada del usuario). ¿Cómo se puede lograr esto?

        TcpClient tcpClient = (TcpClient)client;
        NetworkStream clientStream = tcpClient.GetStream();

        byte[] message = new byte[4096];
        int bytesRead;

        while (true)
        {
            bytesRead = 0;

            try
            {
                // Blocks until a client sends a message                    
                bytesRead = clientStream.Read(message, 0, 4096);
            }
            catch (Exception)
            {
                // A socket error has occured
                break;
            }

            if (bytesRead == 0)
            {
                // The client has disconnected from the server
                break;
            }

            // Message has successfully been received
            ASCIIEncoding encoder = new ASCIIEncoding();

            // Output message
            Console.WriteLine("To: " + tcpClient.Client.LocalEndPoint);
            Console.WriteLine("From: " + tcpClient.Client.RemoteEndPoint);
            Console.WriteLine(encoder.GetString(message, 0, bytesRead));

            // Return message
            string Message = Console.ReadLine();
            if (Message != null)
            {
                byte[] buffer = encoder.GetBytes(Message);
                clientStream.Write(buffer, 0, buffer.Length);
                clientStream.Flush();
            }

Respuestas a la pregunta(1)

Su respuesta a la pregunta