Sobes.tech
Senior

¿Cómo agregar contexto al método Stop para poder interrumpir la espera de la ejecución de tareas con tiempo de espera?

sobes.tech AI

Respuesta de la IA

Чтобы добавить контекст в метод 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 прервётся и вернёт ошибку из контекста. Это позволяет контролировать время ожидания и корректно реагировать на отмену.