计时器到期后的Golang差异VS已停止?

时间:2017-03-19 23:13:59

标签: go timer

基于此示例(https://gobyexample.com/timers),计时器可以停止或过期。但有什么区别?

package main
import "time"
import "fmt"

func main() {
    timer1 := time.NewTimer(time.Second*2)

    <-timer1.C
    fmt.Println("Timer 1 expired")

    timer2 := time.NewTimer(time.Second)
    go func() {
        <-timer2.C
        fmt.Println("Timer 2 expired")
    } ()
    stop2 := timer2.Stop()
    if stop2 {
        fmt.Println("Timer 2 stopped")
    }
}

2 个答案:

答案 0 :(得分:1)

使用某个duration d(在创建时指定)创建的计时器在此类持续时间过去后到期。这意味着等待具有持续时间d的定时器的通道仅在持续时间过去之后(可能甚至更晚,取决于调度)解锁调用者。计时器到期可以被认为是事件触发。

如果在创建Timer后,您想要阻止其过期(例如,因为您不再对等待感兴趣),您可以Stop()定时器。当使用AfterFunc()创建Timer时,这更有用,以取消预定的函数执行。

答案 1 :(得分:0)

Expired表示计时器已经过去并在通道上发送了时间。 Stop()表示程序不再需要时间触发 - 如果成功停止则返回true,如果计时器已经触发并在通道上发送时间则返回false。

有关详细信息,请参阅https://golang.org/pkg/time/#Timer.Stop

相关问题