https://play.golang.org/p/y_9-OQPwfsf 大佬们看这个,看下这个代码怎么改成 reply 通道内数据多久内未 receive 就触发超时,db 这个 goroutine 继续处理,而不是报错
![]() | 1 linvon 2020-12-15 17:37:40 +08:00 case reply := <-reads: select { case reply <- state: case <-time.After(time.Millisecond): } 或者 reply := make(chan int, 1) 使用带缓存 channel |
2 zhengdai1990 OP 多谢大佬 |
3 zhengdai1990 OP @linvon 有个疑问,嵌套在里面的这个 select 不是谁先满足就执行谁么,会执行那个 case time.After 么 |
![]() | 4 linvon 2020-12-16 10:12:04 +08:00 @zhengdai1990 #3 reply channel 如果不带缓存,那么就会阻塞的,必须接受侧已经准备好了才能发送,如果接受侧没有准备那就无法执行,这个时候就会执行 time.After |
5 zhengdai1990 OP @linvon 好吧,明白了 |