Я предлагаю использовать процесс с буфером среднего размера. Повторно заполняйте буфер, пока поток ответа не закончится. Когда буфер заполнен или поток заканчивается, присоедините содержимое этого буфера к строке (или к тому, что вы используете для хранения сообщения).
Если вы хотите прочитать важную часть информации в начале потока, прочитайте достаточно потока, чтобы увидеть это. (Другими словами, вам не нужно заполнять буфер при первом проходе, если вы не хотите.)
Вам также следует рассмотреть возможность использования системы событий, чтобы сигнализировать о наличии новых данных, которые были сформированы таким образом, что основной части вашего процесса не нужно ничего знать о том, откуда поступили данные или как вы буферизуют его.
Редактировать
В ответ на вопрос с комментарием, если у вас есть одно соединение, которое вы пытаетесь использовать повторно для нескольких запросов, вы должны создать поток, который будет читать его снова и снова. Когда он находит данные, он использует это событие, чтобы вытолкнуть их для обработки основной частью вашей программы. У меня нет удобного примера, но вы сможете найти несколько с помощью нескольких запросов bing или google.