定期运行多种方法

时间:2019-04-19 23:47:47

标签: go goroutine

我是新手,尝试在应用程序运行时使两个方法定期同时运行。我设法解决了以下问题,但是for true部分由于阻塞而感觉不正确。

渠道会是更好的方法吗?任何指向正确方向的指针都会有所帮助。

func main() {
    t1 := schedule(ping, time.Second)
    t2 := schedule(ping, 2*time.Second)
    for true {
        time.Sleep(1 * time.Second)
    }
    t1.Stop()
    t2.Stop()
}

func schedule(f func(interval time.Duration), interval time.Duration) *time.Ticker {
    ticker := time.NewTicker(interval)
    go func() {
        for range ticker.C {
            f(interval)
        }
    }()
    return ticker
}

func ping(interval time.Duration) {
    log.Println("ping ", interval)
}

1 个答案:

答案 0 :(得分:4)

为防止应用程序退出,主goroutine必须阻塞。

使用select {}阻止主goroutine。

由于代码运行在应用程序运行期间,因此无需停止代码。

func main() {
    schedule(ping, time.Second)
    schedule(ping, 2*time.Second)
    select {}
}
相关问题