Go 协程超时控制
Go 协程超时控制
- Select 阻塞方式
- Context 方式
先说个场景:
假设业务中 A 服务需要调用 服务B,要求设置 5s 超时,那么如何优雅实现?
Select 超时控制
考虑是否可以用 select + time.After
方式进行实现
这里主要利用的是通道在携程之间通信的特点,当程序调用成功后,会向通道中发送信号。没调用成功前,通道会阻塞。
select { case res := <-c2: fmt.Println(res) case <-time.After(time.Second * 3): fmt.Println("timeout 2") }
当c2
通道中有数据时,并且超时时间没有达到 3s
,走 case res := <-c2
这个业务逻辑,当超时时间达到 3s
, 走的 case <-time.After(time.Second * 3)
这个业务逻辑, 这样就可以实现超时 3s
的控制。
res:= <-c2
是因为channel
可以实现阻塞,那么time.After
为啥可以阻塞呢?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」