import (
"fmt"
"time"
)
func main() {
t := time.AfterFunc(3 * time.Second, func() {
fmt.Println("done")
})
// time.Sleep(4)
for {
select {
case <- t.C:
fmt.Println("ok")
break;
}
}
}
上面的代码执行会报错
想要实现的效果:
按顺序先看到 "done" 再看到 "ok" (并且不想在主线程 time.Sleep)
time.AfterFunc
返回的Timer
t
里,t.C
是nil
。源码。它不能通过<-t.C
来等待到指定时间。要想知道定时函数执行完了,必须自己主动从定时函数里发信号出来,比如: