2012-03-20 3 views
0

Я пытаюсь написать довольно простое приложение, которое передает данные между двумя сокетами. Однако я немного запутался в использовании операций NetworkStream Async (BeginRead и EndRead).Что происходит, когда несколько вызовов Async происходят до завершения делегатов?

Например:

while (myNetworkStream.DataAvailable) 
    myNetworkStream.BeginRead(mBrowserDataBuffer, 0, mBrowserDataBuffer.Length, new AsyncCallback(ProcessNetworkStreamRead), myNetworkStream); 

Когда слово BeginRead, метод будет немедленно вернуться и запустить поток для выполнения операции чтения. Однако, в моем цикле выше, что произойдет, если BeginRead будет вызван AGAIN, прежде чем делегат закончит?

В основном я хочу, чтобы мой делегат добавлял входящие данные в больший буфер и затем обрабатывал сообщения по мере их завершения. Мне нужно использовать асинхронные операции, потому что, пока один сокет читает, я хотел бы также читать и обрабатывать из другого сокета.

ответ

1

Только одна тема должна читать из того же потока.

Один трюк должен позвонить BeginRead снова в ваш обратный вызов EndRead. Выполнение этого цикла, как вы показали, неверно.