Тайм-аут горутины
Предоставленная функция 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