go - 选择块如何等待 ctx.Done() 操作?
问题描述
在下面的代码中:
ctx, cancel := context.WithTimeout(req.Context(), 5000*time.Second)
// Wait for the response or timeout
select {
case <-ctx.Done():
log.Println("timeout, cancel work...")
// Cancel the request and wait for it to complete
// this will shutdown the go-routine immediately
tr.CancelRequest(req)
log.Println(<-ch)
case err := <-ch:
// do something
}
select
同时等待两个接收操作。一个接收操作(<-ch
)是一个块操作
在块的执行中select
,是否ctx.Done()
在块中多次调用select
以验证是否ctx.Done()
返回通道?直到<-ch
被封锁...
解决方案
推荐阅读
- regex - 检查 PostgreSQL 中 where 子句 PostgreSQL 中的子字符串,替换 DB2 中的 XMLQuery 和 fnmatches
- c - 使用 realloc 和 calloc 增加函数内二维数组的大小
- github - 在第二台计算机上从 GitHub 拉取更改
- angular - 使用 selectionMode 'multiple' 在 p 表中进行编程行选择
- javascript - 使用 javascript matchMedia 的移动设备的 Onclick 事件不起作用
- python - Python中的Matlab options=optimset('display','off') 和 f = fzero(....) 的类比是什么?
- algorithm - 将矩阵 PL/pgSQL 相乘时出现错误“错误:数组下标超出范围”?
- linux - gdb 可以用来单步执行未使用 -g 编译的程序的汇编指令吗?
- php - 如何找到多维数组子键并推送数据?
- lua - 如何在 Lua 中将 UUID 从字符串格式转换为二进制格式?