networkStream.Read está bloqueando

Eu estou escrevendo um aplicativo simples que irá se conectar com um servidor. No entanto, quero enviar comandos de chat simples (consulteConsole.ReadLine abaixo). No entanto, este roteiro não vai chegarstring Message = Console.ReadLine(); já que está bloqueadobytesRead = clientStream.Read(message, 0, 4096);.

Eu quero continuar este script, mas se houver bytes entrando, ele deve processá-los (como está fazendo agora) e se nenhum byte for recebido, ele deve passar pelo script e aguardar a entrada do usuário). Como isso pode ser alcançado?

        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();
            }

questionAnswers(1)

yourAnswerToTheQuestion