请教个context应用场景的问题

visli · · 1707 次点击
这样用 只能每次都创建一个新的context 。 用reids pipeline更合适吧
#7
更多评论
你这里没必要使用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