Goroutine Timeout
提供的函數 Find() 使用 Goroutine 發出一系列 HTTP 請求並處理它們的回應。然而,令人擔憂的是,即使超過指定的逾時時間,這些請求也會在後台繼續運作。
潛在的 Goroutine 洩漏
不太可能存在 Goroutine 洩漏代碼。當 Find() 函數傳回逾時時,主 Goroutine 繼續運行,後台 Goroutine 實質上被放棄。
HTTP 請求取消
避免逾時後發出請求,解決方案是為每個 HTTP 請求使用 context.Context。上下文允許您在發生逾時時取消請求。
<code class="go">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 <- Response{data: data, status: status} }() select { case response := <-ch: return response.data, response.status case <-ctx.Done(): return "Request timed out", false } }</code>
發生逾時時,呼叫 cancel() 將取消 ctx 內建立的所有 HTTP 要求。這可以防止這些請求進行任何進一步的處理或消耗資源。
以上是如何防止 Goroutine 中 HTTP 請求逾時後繼續?的詳細內容。更多資訊請關注PHP中文網其他相關文章!