Как реализовать метод Status для получения состояния задачи по ID?

Status должен быстро прочитать состояние по ID, отличая неизвестную задачу от queued, running, done и failed. Чтение синхронизируют с worker, который обновляет запись.

Короткий ответ

Что ответить на собеседовании

Status должен быстро прочитать состояние по ID, отличая неизвестную задачу от queued, running, done и failed. Чтение синхронизируют с worker, который обновляет запись.

Подробный разбор

Ответ с пояснениями

Status должен быстро прочитать состояние по ID, отличая неизвестную задачу от queued, running, done и failed. Чтение синхронизируют с worker, который обновляет запись.

Например, для map[ID]Result под s.mu:

func (s *Scheduler) Status(id ID) (Result, bool) {
    s.mu.RLock()
    defer s.mu.RUnlock()
    result, ok := s.results[id]
    result.Data = append([]byte(nil), result.Data...)
    return result, ok
}

Здесь предполагаются RWMutex и Result с полем Data []byte. False означает неизвестный ID, а не незавершённую работу. Возвращайте копию изменяемых данных; Status не должен ждать Process и держать lock во время вычисления.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее