Мне удалось сделать нечто подобное, скомбинировав CancelContext с TimeoutContext ...
Вот пример кода:
cancelCtx, cancel := context.WithCancel(context.Background())
defer cancel()
// The program "sleeps" for 5 seconds.
timeoutCtx, _ := context.WithTimeout(cancelCtx, 5*time.Second)
select {
case <-timeoutCtx.Done():
if cancelCtx.Err() != nil {
log.Printf("Context cancelled")
}
}
В в этом репо выможно найти полное использование вышеуказанного кода.Извините за короткий ответ, я еще не включил компьютер, и мне не так просто ответить с телефона ...