У меня есть открытое соединение TCP, и читающий использование NetworkStream. BeginRead (). После того как соединение закрывается с обоих концов, обратный вызов называют, и потоковый объект бесполезен - как документация, говорит, EndRead () бросает IOException или ObjectDisposedException, зависящий в этом случае, на котором конец завершил соединение.
Гарантируется, что нет никаких данных, которые я пропускаю просто промежуточный последний успешный EndRead (и re-BegingRead) и разъединение, особенно если я делаю это в своем конце? Если это не, в случае, если я - конец, закрывающий соединение, сделайте я имею к вручную NetworkStream. Читайте () при разъединении, чтобы удостовериться, что ничто не оставляют непрочитанным?
В этом случае следует использовать BeginRead для чтения потока (точно так же, как вы это делаете) и для обработки случая «больше данных в потоке» в методе обратного вызова.
Метод обратного вызова вызывает EndRead и собирает данные, считанные из потока (обычно путем добавления их к экземпляру StringBuilder) , а затем снова вызывает BeginRead . Как только EndRead вернет 0 байтов, это ваша гарантия, что из потока больше не будет считываться данных.
Вот документация, которая может вам пригодиться: Использование сокетов async-клиента
Я заметил, что нигде не было специально указано, что возврат 0 байтов был гарантией, поэтому я понимаю вашу путаницу здесь, но пример Совершенно ясно, что это ваш сигнал бросить чтение.