Status должен быстро прочитать состояние по ID, отличая неизвестную задачу от queued, running, done и failed. Чтение синхронизируют с worker, который обновляет запись.
Как реализовать метод Status для получения состояния задачи по ID?
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 во время вычисления.