Sockets en C #, ¿cómo puedo leer y escribir datos asincrónicamente a través de un NetworkStream?

[Estoy limitado a Visual Studio 2010 y, por lo tanto, C # 4. async y wait no están disponibles para mí].

Estoy trabajando en la arquitectura de red para un proyecto mío, que envía paquetes de datos a través de una red entre un servidor y un cliente, pero el cliente y el servidor deben continuar ejecutándose mientras esperan, por lo que el código no debe bloquearse, por lo que Pensé en usar los métodos asincrónicos. Sin embargo, a excepción de las E / S simples sincrónicas, no sé mucho sobre qué hacer, especialmente cuando uso un NetworkStream. Lo que intento hacer es:

1) El cliente se conecta al servidor

2) El servidor acepta la conexión

3) El servidor espera datos del cliente

4) El servidor procesa datos

5) El servidor responde al cliente

6) Mientras la conexión está abierta, repita desde 3.

Y me gustaría usar un NetworkStream para envolver el zócalo. Pero soy nuevo en E / S asíncrona y no estoy muy seguro de cómo hacerlo sin bloquear otras partes del código del servidor / cliente cuando espero una respuesta, especialmente con un NetworkStream. En mi investigación veo ejemplos que usan algo como esto:

while(true){
    socket.BeginAccept(new AsyncCallback(AcceptCallback), socket );
}

Pero parece que ese bucle aún detendría la aplicación. ¿Alguien puede darme algunos consejos (ha) sobre cómo hacer esto exactamente? No he podido encontrar muchos ejemplos que mantengan la conexión abierta, solo Client Connect -> Client Send -> Server Recieve -> Server Send -> Disconnect. No estoy pidiendo el código completo, solo la idea general con algunos fragmentos.

Respuestas a la pregunta(2)

Su respuesta a la pregunta