Первая проверка отправляет полные пакеты во время чтения, вторая — последний неполный пакет. Без второй остаток потеряется, если количество элементов не кратно MaxItems.
Зачем две проверки при пакетной обработке
Первая проверка отправляет полные пакеты во время чтения, вторая — последний неполный пакет. Без второй остаток потеряется, если количество элементов не кратно MaxItems.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Код копит элементы в buf, отправляет его при len(buf)==MaxItems, а после окончания входа дополнительно проверяет len(buf)>0 и отправляет остаток. Почему одной проверки недостаточно?
Ответ
Первая проверка отправляет полные пакеты во время чтения, вторая — последний неполный пакет. Без второй остаток потеряется, если количество элементов не кратно MaxItems.
Для 23 элементов и лимита 10 нужны пакеты 10, 10 и 3. После отправки сбросьте длину либо выделите новый буфер, учитывая владение данными: асинхронный получатель не должен видеть последующую перезапись того же массива. При нулевом остатке пустой пакет не отправляется.