一尘不染

中断睡眠goroutine?

go

例如,有没有一种我可以执行的方法

time.Sleep(time.Second * 5000) //basically a long period of time

然后在需要时“唤醒”睡眠的goroutine?

我看到里面有一个Reset(d Duration)Sleep.go但是我无法调用它。有什么想法吗?


阅读 259

收藏
2020-07-02

共1个答案

一尘不染

没有办法中断time.Sleep,但是,您可以使用time.Afterselect语句来获取所需的功能。

一个简单的例子来展示基本思想:

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。当它在这些通道中的任何一个上接收时,它将脱离选择并继续执行。

2020-07-02