5.5. Обработка множества команд
Клиент может передавать новые команды, не дожидаясь отклика о завершении обработки предыдущих команд, с учетом правил однозначности (см. ниже) и управления потоком данных на нижележащем уровне. Сервер может начать обработку новой команды до завершения обработки прежних, учитывая правила однозначности. Однако все отклики с запросами на продолжение команды и продолжения команд ДОЛЖНЫ быть согласованы до того, как будет передана следующая команда.
Правило однозначности связано с возможной зависимостью результатов выполнения команды от результатов завершения предшествующих команд. Для клиентов НЕДОПУСТИМО передавать команду без ожидания, если результаты могут быть неоднозначными. Если сервер видит возможность неоднозначности, он ДОЛЖЕН выполнять команды в заданном клиентом порядке.
Тривиальным случаем возникновения неоднозначности является ситуация, когда результаты выполнения одной команды напрямую воздействуют на результат другой (например, команды FETCH и STORE для флагов сообщения). Менее тривиальные ситуации, для которых допустимы непомеченные отклики EXPUNGE (все команды, за исключение FETCH, STORE, SEARCH), поскольку непомеченный отклик EXPUNGE может делать некорректными порядковые номера в следующей команде. Это не вызывает проблем для команд FETCH, STORE, SEARCH, поскольку для этих команд запрещена передача откликов EXPUNGE, пока не будет завершена обработка всех команд. Следовательно, если клиент передаст любую из команд, кроме FETCH, STORE, SEARCH, он ДОЛЖЕН дождаться отклика и только после этого может передавать команды с порядковыми номерами сообщений.
Ниже приведены несколько примеров некорректных последовательностей команд:
FETCH + NOOP + STORE STORE + COPY + FETCH COPY + COPY CHECK + FETCH
Приведенные ниже последовательности команд можно передавать, не дожидаясь откликов:
FETCH + STORE + SEARCH + CHECK STORE + COPY + EXPUNGE