public static void ReadCallback(IAsyncResult asyncResult) { ClientState cs = (ClientState)asyncResult.AsyncState; int bytesRcvd = cs.NetStream.EndRead(asyncResult); cs.AddToTotalBytes(bytesRcvd); cs.AppendResponse(Encoding.ASCII.GetString(cs.ByteBuffer, 0, bytesRcvd)); if (cs.TotalBytes < cs.ByteBuffer.Length) { Console.WriteLine("Thread {0} ({1}) - ReadCallback(): Received {2} bytes...", Thread.CurrentThread.GetHashCode(), Thread.CurrentThread.ThreadState, bytesRcvd); cs.NetStream.BeginRead(cs.ByteBuffer, cs.TotalBytes, cs.ByteBuffer.Length - cs.TotalBytes, new AsyncCallback(ReadCallback), cs.NetStream); } else { Console.WriteLine("Thread {0} ({1}) - ReadCallback(): Received {2} total " + "bytes: {3}", Thread.CurrentThread.GetHashCode(), Thread.CurrentThread.ThreadState, cs.TotalBytes, cs.EchoResponse); ReadDone.Set(); // 읽기 작업 종료 신호를 발생시킨다. } }