2 回答
TA贡献2011条经验 获得超2个赞
因为time.After是一个函数,所以每次迭代都会返回一个新的通道。如果您希望此通道在所有迭代中都相同,则应在循环之前将其保存:
timeout := time.After(3 * time.Second)
for {
select {
//...
case <-timeout:
fmt.Printf("timeout\n")
return
}
}
游乐场:http : //play.golang.org/p/muWLgTxpNf。
TA贡献1776条经验 获得超12个赞
另一种可能性是使用time.Tick(1e9)每秒生成一个时间刻度,然后timeAfter在指定时间段后侦听频道。
package main
import (
"fmt"
"time"
)
func main() {
count := 0
timeTick := time.Tick(1 * time.Second)
timeAfter := time.After(5 * time.Second)
for {
select {
case <-timeTick:
count++
fmt.Printf("tick %d\n", count)
if count >= 5 {
fmt.Printf("ugh\n")
return
}
case <-timeAfter:
fmt.Printf("timeout\n")
return
}
}
}
- 2 回答
- 0 关注
- 176 浏览
添加回答
举报