Чтобы удалить неиспользуемый файл, нужно знать, какие документы на него ссылаются. Есть и второе условие: новая ссылка не должна появиться, пока файл удаляется или уже удалён. Поэтому очистку файлов приходится согласовывать с сохранением документов. Если ответ базы потерялся, нужно ещё установить, не появилась ли ссылка, о которой приложение пока не знает.
В интерфейсе отмена означает, что результат операции больше не нужен. Для выполняющего её кода это может ничего не изменить: например, браузер продолжит декодировать изображение. Я разделяю два вопроса: как остановить ненужную работу и как запретить ей менять интерфейс, если остановить её не удалось.
Порядок сообщений нужно закрепить до их асинхронной подготовки. Шифрование второго сообщения может закончиться раньше первого, и WebSocket получит их уже в обратной последовательности. Очередь должна сохранять место каждого сообщения с самого начала, позволяя готовому результату дождаться своей отправки.
Удаление данных затрагивает и работу, которая началась раньше. Запрос уже мог получить копию записи и продолжить готовить результат после очистки кеша. Поэтому очистку нужно связать с проверкой результатов незавершённых запросов: устаревшая копия не должна снова попасть в кеш или в ответ посетителю.