Goroutine Timeout
提供的函數 Find() 使用 goroutine 發出一系列 HTTP 請求並處理它們的回應。然而,令人擔憂的是,即使這些請求超過了指定的逾時時間,這些請求也會在後台繼續運作。
潛在的 Goroutine 洩漏
不太可能存在 Goroutine 洩漏代碼。當Find()函數傳回逾時時,主goroutine繼續執行,後台goroutine實質上被放棄。
HTTP請求取消
避免逾時後發出請求,解決方案是為每個 HTTP 請求使用 context.Context。上下文允許您在發生逾時時取消請求。
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()將取消ctx內所建立的所有HTTP請求。這可以防止這些請求進行任何進一步的處理或消耗資源。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3