Есть функция 1 которая проверяет условие (например что очередь с данными Q не пуста) я ставит в очередь на выполнение какую-либо задачу 2 которая читает по кусочка данные из этой очереди Q и обрабатывает их.
Когда задача выполняется она снова вызывает 1.
Если очередь обработана функция 1 вызывает finish-функцию 3 которая выполняет заключительные действия (например проставляет флаги в БД).