有没有办法可以执行,例如
time.Sleep(time.Second * 5000) //basically a long period of time
然后在我愿意的时候“唤醒”睡觉的goroutine?
我看到Reset(d Duration)
中有一个Sleep.go
,但我无法调用它......有什么想法吗?
答案 0 :(得分:18)
无法中断time.Sleep
,但是,您可以使用time.After
和select
语句来获取您正在使用的功能。
显示基本想法的简单示例:
package main
import (
"fmt"
"time"
)
func main() {
timeoutchan := make(chan bool)
go func() {
<-time.After(2 * time.Second)
timeoutchan <- true
}()
select {
case <-timeoutchan:
break
case <-time.After(10 * time.Second):
break
}
fmt.Println("Hello, playground")
}
http://play.golang.org/p/7uKfItZbKG
在这个例子中,我们正在产生一个信号goroutine告诉main停止暂停。主要是等待和聆听两个频道,timeoutchan
(我们的信号)和time.After
返回的频道。当它在这些通道中的任何一个上接收时,它将跳出选择并继续执行。