请教个context应用场景的问题

visli · · 1678 次点击
看看官网对于超时的解释 https://redis.uptrace.dev/guide/go-redis-debugging.html#redis-connection-pool-timeout
#4
更多评论
你这里没必要使用context.WithTimeout,在进入方法后直接声明一个context.TODO()或者context.Background()的变量,然后在每次调用中使用这个变量就可以了 context.WithTimeout和context.WithDeadline(),真正使用的时候还需要一个监听超时的动作, ```go select { case <-ctx.Done(): return ctx.Err() case out <- v: } ``` 如果超时了,就丢弃子协程的操作结果(虽然有cancel方法,事实上并不会真的取消子协程的运行) 参考context.go源码Done() <-chan struct{}的注释
#1
这里其实已是真正要使用了,避免每次操作不会超时,一旦超时就做超时处理。所以用TODO()或Backgroud()来占位已不合适了。
#2