Структура данных - это не то, чего не хватает. Чего не хватает, так это сущности - задачи «Таймер», я бы сказал, которую вы останавливаете и перезапускаете каждый раз, когда отправляете пакет изображений в службу. Вы делаете это независимо от того, отправляете ли вы их, потому что у вас было 5 (кстати, я предполагаю, что 5 - это только ваш начальный номер, и он будет настраиваться вместе с вашим временем ожидания), или же потому, что задание тайм-аута сработало.
Итак, работают две сущности: основной поток, который получает запросы, ставит их в очередь, проверяет глубину очереди и, если она равна 5 или более, отправляет самую старую 5 в службу (и перезапускает задачу таймера); и задача таймера, которая собирает неполные партии и отправляет их.
Примечание: у этого основного потока, похоже, есть несколько обязанностей, поэтому возможна некоторая декомпозиция.