Назад к задачам
Junior — Middle+
9

Создание прогрессивного обновления результатов длительной операции

Компании, где спрашивали:

Positive TechnologiesPositive Technologies
Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Необходимо изменить существующий веб‑сервис, чтобы длительная операция выполнялась в отдельном потоке и не блокировала основной процесс сервера. При этом клиенту следует отправлять актуальные данные по мере их появления, а не ждать завершения всей задачи.

Требования:

  • Перевести выполнение длительной функции в асинхронный режим.
  • Обеспечить постепенную отправку клиенту самых свежих результатов.
  • Гарантировать, что основной поток сервера остаётся свободным для обработки новых запросов.

Пример исходного кода (можно переименовать переменные, но логика остаётся той же):

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
}