在下面的代码中:
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被封锁...
翻过高山走不出你
人到中年有点甜
相关分类