有没有办法在 Go 中执行重复的后台任务?我在想 Java 中类似 Timer.schedule(task, delay, period)
的东西。我知道我可以使用 goroutine 和 Time.sleep()
来做到这一点,但我想要一些可以轻松停止的东西。
这是我得到的,但对我来说看起来很难看。有没有更清洁/更好的方法?
func oneWay() {
var f func()
var t *time.Timer
f = func () {
fmt.Println("doing stuff")
t = time.AfterFunc(time.Duration(5) * time.Second, f)
}
t = time.AfterFunc(time.Duration(5) * time.Second, f)
defer t.Stop()
//simulate doing stuff
time.Sleep(time.Minute)
}
原文由 Steve Brisk 发布,翻译遵循 CC BY-SA 4.0 许可协议
函数
time.NewTicker
创建一个发送周期性消息的通道,并提供一种方法来停止它。像这样使用它(未经测试):您可以通过关闭
quit
频道来停止工作人员:close(quit)
。