Вот как вы можете реализовать это: начните с определения некоторого класса, который будет содержать состояние длительной операции -> вам потребуются такие свойства, как id, progress, result, ... Затем вам понадобятся два действия контроллера : тот, который запустит задачу, и другой, который вернет прогресс. Действие Start создаст новый поток для выполнения длительной операции и немедленного возврата. После запуска задачи вы можете сохранить состояние этой операции в некотором общем хранилище, например, в приложении, используя идентификатор задачи.
Второму действию контроллера будет передан идентификатор задачи, и он запросит приложение, чтобы получить информацию о ходе выполнения данной задачи. В течение этого времени фоновый поток будет выполняться и каждый раз, когда он прогрессирует, он будет обновлять ход выполнения задачи в Приложении.
Последняя часть - это клиент: вы можете опрашивать действие контроллера прогресса через регулярные промежутки времени, используя AJAX, и обновлять прогресс.