Назад к задачам
Positive TechnologiesПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Middle+
9
Создание прогрессивного обновления результатов длительной операции
Компании, где спрашивали:
Условие задачи
Необходимо изменить существующий веб‑сервис, чтобы длительная операция выполнялась в отдельном потоке и не блокировала основной процесс сервера. При этом клиенту следует отправлять актуальные данные по мере их появления, а не ждать завершения всей задачи.
Требования:
- Перевести выполнение длительной функции в асинхронный режим.
- Обеспечить постепенную отправку клиенту самых свежих результатов.
- Гарантировать, что основной поток сервера остаётся свободным для обработки новых запросов.
Пример исходного кода (можно переименовать переменные, но логика остаётся той же):
func ComputeHeavy() int {
res := externalCall()
// process res
return res
}
func main() {
// initialize server
handler := func(w http.ResponseWriter, r *http.Request) {
// write response
}
http.HandleFunc("/", handler)
// run server
}