Правильное использование метода Async BeginRead () - PullRequest
1 голос
/ 30 октября 2011

Часть сервера BeginRead выглядит следующим образом:

    private void listen()
    {
        allDone.Reset();
        networkStream.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(newDataRecievedCallback), null);
        allDone.WaitOne(10);
    }

    private void newDataRecievedCallback(IAsyncResult rst)
    {
        try
        {
            int incomeDataSize = networkStream.EndRead(rst);
            lastRecievedBuffer = convertToString(buffer, incomeDataSize).Trim();
            cleanBuffer();

            if (IsValidXml(lastRecievedBuffer)) 
                parseXML(lastRecievedBuffer);
            allDone.Set();

            //Here I call the listen() method again               
            listen();
        }
        catch (Exception ex)
        {
            LogSystem.saveServerError(ex.StackTrace, ex.Source);
        }
    }

Использование NetworkStream:

    private NetworkStream networkStream;
    private TcpClient tcpClient;

    //this part is in the constructor of the Server class
    tcpClient = new TcpClient(loginData.Host, loginData.Port);
    networkStream = tcpClient.GetStream();

Это правильное использование BeginRead () или я вызываю Async BeginRead() Метод, подобный логике синхронизации?

Есть ли лучший способ сделать это без повторного вызова метода listen ()?Спасибо!

...