В обратном вызове для NetworkStream.BeginRead
я, кажется, заметил, что все байты всегда читаются. Я вижу, что многие учебники проверяют, меньше ли BytesRead, чем общее количество байтов, и если да, то читайте снова, но, похоже, это никогда не так.
Условие if (bytesRead < totalBytes)
никогда не срабатывает, даже если одновременно отправляется много данных (тысячи символов) и даже если размер буфера установлен на очень маленькое значение (16 или около того).
Я не проверял это «старомодным способом», поскольку я использую Task.Factory.FromAsync вместо вызова NetworkStream.BeginRead и предоставления обратного вызова, когда я вызываю EndRead. Возможно, Задачи автоматически включают эту функцию, не возвращаясь, пока все данные не будут прочитаны? Я не уверен.
В любом случае, мне все еще любопытно, когда все данные не будут считаны сразу. Нужно ли вообще проверять, не все ли данные были прочитаны, и если да, то читать заново? Кажется, я не могу заставить условное выражение когда-либо запускаться.
Спасибо.