首页 > 后端开发 > Golang > 正文

如何防止 Goroutine 中 HTTP 请求超时后继续?

DDD
发布: 2024-11-01 05:43:02
原创
574 人浏览过

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学习者快速成长!