{
// Run the HTTP request in a goroutine and pass the response to f.
c := make(chan error, 1)
req = req.WithContext(ctx)
go func() { c <- f(http.DefaultClient.Do(req)) }()
select {
case <-ctx.Done():
<-c // Wait for f to return.
return ctx.Err()
case err := <-c:
return err
}
}
есть какой-то кашерный способ грохнуть горутину, которая выполняет запрос если контекст раньше выстрелил?
зачем вы ждете ответа в case <-ctx.Done():
если функция запускаемая горутиной уважает отменяемые context.Context тогда да, иначе никак. Но отмена контекста это не “грохнуть горутины” а скорее “вежливо попросить её завершиться, а дальше она сама решит когда и как”
Обсуждают сегодня