首页  >  文章  >  后端开发  >  如何防止Goroutine泄漏并在超时内取消HTTP请求?

如何防止Goroutine泄漏并在超时内取消HTTP请求?

Linda Hamilton
Linda Hamilton原创
2024-10-30 09:43:02639浏览

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