请教个context应用场景的问题

visli · · 1677 次点击
1、你的代码中没有对超时做任何处理,设置超时有啥用呢? 2、redis会超时吗?如果会超时,就没人会用redis了吧
#3
更多评论
你这里没必要使用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