首頁 > 後端開發 > Golang > 主體

如何防止 Goroutine 中 HTTP 請求逾時後繼續?

DDD
發布: 2024-11-01 05:43:02
原創
575 人瀏覽過

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

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!