」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何防止 Goroutine 中 HTTP 請求逾時後繼續?

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

發佈於2024-11-15
瀏覽:217

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。上下文允許您在發生逾時時取消請求。

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