例如,有没有一种我可以执行的方法
time.Sleep(time.Second * 5000) //basically a long period of time
然后在需要时“唤醒”睡眠的goroutine?
我看到里面有一个Reset(d Duration),Sleep.go但是我无法调用它。有什么想法吗?
Reset(d Duration)
Sleep.go
没有办法中断time.Sleep,但是,您可以使用time.After和select语句来获取所需的功能。
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。当它在这些通道中的任何一个上接收时,它将脱离选择并继续执行。
timeoutchan