Периодически запускать несколько методов - PullRequest
2 голосов
/ 20 апреля 2019

Я новичок и пытаюсь периодически запускать два метода одновременно, пока приложение работает. Мне удалось придумать следующее, но часть 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 Ответ

4 голосов
/ 20 апреля 2019

Для предотвращения выхода из приложения основная программа должна блокироваться.

Используйте select {} для блокировки основной процедуры.

Поскольку тикеры работают в течение всего срока действия приложения, нет необходимости останавливать тикеры.

func main() {
    schedule(ping, time.Second)
    schedule(ping, 2*time.Second)
    select {}
}
...