Назад к вопросам
Senior
13
Как добавить контекст в метод Stop, чтобы можно было прерывать ожидание выполнения тасков с таймаутом?
Компании, где спрашивали
Cloud.ru
Ответ от нейросети
sobes.tech AI
Чтобы добавить контекст в метод Stop для возможности прерывания ожидания выполнения задач с таймаутом, нужно использовать context.Context из стандартной библиотеки Go.
Пример:
func (s *Service) Stop(ctx context.Context) error {
done := make(chan struct{})
go func() {
// Здесь логика остановки, ожидание завершения тасков
s.waitTasks() // блокирующий вызов
close(done)
}()
select {
case <-done:
return nil // успешно завершено
case <-ctx.Done():
return ctx.Err() // прервано по таймауту или отмене
}
}
Вызов метода с таймаутом:
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
err := service.Stop(ctx)
if err != nil {
fmt.Println("Stop interrupted:", err)
}
Таким образом, если ожидание выполнения тасков длится дольше заданного таймаута, Stop прервётся и вернёт ошибку из контекста. Это позволяет контролировать время ожидания и корректно реагировать на отмену.