美文网首页
time包中的timer,ticker,after

time包中的timer,ticker,after

作者: shuff1e | 来源:发表于2018-09-15 00:02 被阅读21次
    package main
    
    import (
        "fmt"
        "time"
    )
    
    //发送者
    func sender(c chan int) {
        for i := 0; i < 100; i++ {
            time.Sleep(time.Second * 11)
            c <- i
        }
    }
    
    func main() {
        c := make(chan int)
        go sender(c)
        /* timer := time.NewTimer(1 * time.Second) */
        /* timeout := time.After(time.Second * 2) */
        ticker := time.NewTicker(10 * time.Second)
        for {
            select {
            /* case d := <-timer.C: */
            /*     fmt.Println(d,"这是一次性的timer >>>>>") */
            /* case d := <-timeout: */
            /*     fmt.Println(d,"这是一次性的timeout >>>>>") */
            case d := <-c:
                fmt.Println(d)
            case d := <-ticker.C:
                fmt.Println(d,"这是定时的ticker >>>>>")
            /* case d := <-time.After(time.Second * 3): */
            /*     fmt.Println(d, "这是定时的timeout *****") */
            case d := <-time.NewTimer(time.Second * 3).C:
                fmt.Println(d, "这是定时的timeout *****")
            }
    
        }
    }
    

    time.After和time.NewTimer是一样的,都是一次性的,
    select开始的时候,会把这两个初始化,然后select会阻塞,等待从某个管道中取数据。
    1.当过了相应时间,其他管道都没有数据,time.After有数据的时候,就从这个里面取数据,下次select的时候重新初始化
    2.没有等到相应时间过去,其他管道有数据,select从其他管道取数据,然后再次select的时候,time.After重新初始化

    相关文章

      网友评论

          本文标题:time包中的timer,ticker,after

          本文链接:https://www.haomeiwen.com/subject/snoagftx.html