¿La mejor manera de aceptar múltiples clientes tcp?

Tengo una infraestructura cliente / servidor. Actualmente usan un TcpClient y TcpListener para enviar datos de recepción entre todos los clientes y el servidor.

Lo que hago actualmente es cuando se reciben datos (en su propio hilo), se pone en una cola para que otro hilo lo procese con el fin de liberar el socket para que esté listo y abierto para recibir nuevos datos.

                // Enter the listening loop.
                while (true)
                {
                    Debug.WriteLine("Waiting for a connection... ");

                    // Perform a blocking call to accept requests.
                    using (client = server.AcceptTcpClient())
                    {
                        data = new List<byte>();

                        // Get a stream object for reading and writing
                        using (NetworkStream stream = client.GetStream())
                        {
                            // Loop to receive all the data sent by the client.
                            int length;

                            while ((length = stream.Read(bytes, 0, bytes.Length)) != 0)
                            {
                                var copy = new byte[length];
                                Array.Copy(bytes, 0, copy, 0, length);
                                data.AddRange(copy);
                            }
                        }
                    }

                    receivedQueue.Add(data);
                }

Sin embargo, quería saber si hay una mejor manera de hacer esto. Por ejemplo, si hay 10 clientes y todos quieren enviar datos al servidor al mismo tiempo, uno lo hará mientras que todos los demás fallarán, o si un cliente tiene una conexión lenta y acapara el socket, todas las demás comunicaciones se detendrán .

¿No hay alguna forma de poder recibir datos de todos los clientes al mismo tiempo y agregar los datos recibidos en la cola para procesarlos cuando haya terminado la descarga?

Respuestas a la pregunta(4)

Su respuesta a la pregunta