请教个context应用场景的问题

visli · · 1677 次点击
谢谢回复。1、Keys(),Set()方法超时后,会返回相应的error, 由调用的函数再来做相应的处理,只是上面代码我省掉没写出来。2、redis也可能会超时的,比如网络异常了。另外这个场景其实也可以换用操作普通关系型数据库来考虑。
#5
更多评论
你这里没必要使用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