首頁 >後端開發 >Golang >如何防止Goroutine洩漏並在超時內取消HTTP請求?

如何防止Goroutine洩漏並在超時內取消HTTP請求?

Linda Hamilton
Linda Hamilton原創
2024-10-30 09:43:02729瀏覽

How to Prevent Goroutine Leaks and Cancel HTTP Requests within a Timeout?

具有並發控制的Goroutine 逾時

在提供的程式碼中,您已經實作了一個函數Find(),它利用goroutine(go func() 語句)使用findCicCode() 進行非同步資料檢索。您設定了 50 毫秒的超時時間來接收 Goroutine 的回應。

但是,您擔心如果超過超時時間,可能會導致 Goroutine 洩漏。此外,您希望能夠在逾時時取消 findCicCode() 發出的 HTTP 請求。

Goroutine 洩漏預防

為了處理 Goroutine 洩漏,它對於確保在特定範圍內創建的任何 goroutine 在範圍結束之前終止至關重要。在這種情況下,當達到超時時,取消select 語句中的goroutine 非常重要:

<code class="go">case <-time.After(50 * time.Millisecond):
  // Cancel the goroutine to prevent a potential leak
  close(ch)
  return "Request timed out", false</code>

HTTP 請求取消

取消HTTP 請求goroutine 中,您可以利用Go 標準函式庫提供的context.Context 和context.CancelFunc:

<code class="go">// Create a context with a timeout of 50 milliseconds
ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)
defer cancel()

// Execute the findCicCode() function within this context
data, status := findCicCodeWithContext(ctx)

// If the context is canceled (timeout), the HTTP requests will be aborted</code>

以上是如何防止Goroutine洩漏並在超時內取消HTTP請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn