«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как предотвратить продолжение HTTP-запросов после тайм-аута в горутине?

Как предотвратить продолжение HTTP-запросов после тайм-аута в горутине?

Опубликовано 15 ноября 2024 г.
Просматривать:234

How to Prevent HTTP Requests from Continuing After Timeout in a Goroutine?

Тайм-аут горутины

Предоставленная функция Find() использует горутину для создания серии HTTP-запросов и обработки их ответов. Однако проблема заключается в том, что эти запросы продолжаются в фоновом режиме, даже если они превышают указанный тайм-аут.

Потенциальная утечка горутины

Маловероятно, что в код. Когда функция Find() возвращает таймаут, основная горутина продолжает работу, а фоновая горутина по сути закрывается.

Отмена HTTP-запроса

Чтобы избежать выполнения запросов после таймаута , решение состоит в том, чтобы использовать context.Context для каждого HTTP-запроса. Контекст позволяет отменить запрос в случае истечения времени ожидания.

func Find() (interface{}, bool) {
  ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)
  defer cancel()

  ch := make(chan Response, 1)

  go func() {
    data, status := findCicCode()
    ch 

Когда наступит таймаут, вызов cancel() отменит все HTTP-запросы, созданные в ctx. Это предотвращает любую дальнейшую обработку или потребление ресурсов этими запросами.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3