有没有办法在Go中执行重复的后台任务?我在想类似Timer.schedule(task, delay, period)
Java 的东西。我知道我可以使用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)
}
3
感谢您在示例中使用time.Duration(x)。我可以找到的每个示例都有一个硬编码的int,并且在使用int(或float)变量时会抱怨。
—
Mike Graf
@MikeGraf您可以
—
florianrosenberg
t := time.Tick(time.Duration(period) * time.Second)
在时间段不长的地方做int
IMO,这个解决方案看起来还不错。尤其是 如果您只是简单地调用f()而不是外部时间。非常适合您想要在工作完成后x秒钟进行工作的情况,而不是一个固定的时间间隔。
—
卢克W