c # NetworkStream escribe () y lee ()

Me pregunto cómo evitar que Networkstream.Read() bloquee el subproceso. Tengo un hilo separado donde NetworkStream.Read() está esperando datos del servidor. Supongamos que el usuario presiona algún botón que envía algunos datos al servidor. Pero no puedo llamar a NetworkStream.Write() mientras haya NetworkStream.Read() en otro hilo que espera datos. Puedo bloquear NetworkStream cada vez, pero NetworkStream.Read() bloqueará el hilo, así que no puedo enviar datos hasta que lea al menos 1 byte.

Puede emitir tanto read como write simultáneamente como se indica en los documentos en MSDN docs.

Las operaciones de lectura y escritura se pueden realizar simultáneamente en una instancia de la clase NetworkStream sin la necesidad de sincronización. Siempre que haya un hilo único para las operaciones de escritura y un hilo único para las operaciones de lectura, no habrá interferencia cruzada entre los hilos de lectura y escritura y no se requiere sincronización.

Deberá usar la operación de lectura sin locking como se describe en: http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.beginread.aspx

Puede consultar la propiedad NetworkStream.DataAvailable en algunos períodos de tiempo y leer solo si es cierto. “Si DataAvailable es verdadero, una llamada a Read regresa inmediatamente”. Así que no bloquearás la stream.

La clase NetworkStream proporciona métodos para enviar y recibir datos a través de sockets Stream en modo de locking. Para obtener más información sobre el locking frente a los sockets sin locking, consulte Uso de un socket de cliente asíncrono.