go代码如下所示,我尝试通过go例程打印“结果”。为什么“超时”不是在3秒后打印,而是10秒。因为所有的10个“结果”打印。
package main
import "fmt"
import "time"
func main() {
ch := make(chan string)
go func() {
for i:=0;i<10;i++ {
time.Sleep(time.Second * 1)
ch <- "result"
}
}()
for {
select {
case res := <-ch:
fmt.Println(res)
case <-time.After(time.Second * 3):
fmt.Println("timeout")
return
}
}
}
/**
result
result
result
result
result
result
result
result
result
result
timeout
*/
1条答案
按热度按时间bvk5enib1#
在每个for循环中,在case res:= <-ch之后,创建一个新通道<-time.After(time.Second * 3)。
这个修复可能是你想要的: