Я уже писал тебе, про фоновые задачи. в другом вопросе (gearman). Почему ты решил что у тебя метод асинхронный?
Есть еще решение, если лень с очередями задач разбираться ,сделай ,крон, который будет обращаться в базу, раз в 10 секунд например. Складывай запрос пользователя в базу, пусть его дергает крон и получает данные. Пользователь у тебя в любом случае будет ждать.
Есть еще вариант, но он опять с очередями. Складываешь запросы в очередь и результат возвращаешь результат в комет сервер на какой-нибудь канал, этот канал слушает пользователь и по мере решения задач, данные на странице будут обновлятся.
Попробую наглядно:
Пользователь -запрос-> Сервер
Сервер -Часть ответа сразу-> Пользователь
Сервер -Сложная часть->Можно в очередь, можно в консольное приложение
Обработка -Какая-то часть-> Комет сервер (канал)
Пользователь (слушает канал) <-Обновляет данные - Комет сервер