1 回答

TA贡献1872条经验 获得超3个赞
time.Tick()
无法停止的状态文档:
Tick 是 NewTicker 的便捷包装器,仅提供对 ticking 通道的访问。虽然 Tick对于不需要关闭 Ticker 的客户端很有用,但请注意,如果没有办法将其关闭,则底层 Ticker 无法被垃圾收集器恢复;它“泄漏”。
如果您需要停止它,请改用它time.NewTicker()
。在一个新的 goroutine 中运行doEvery()
,并传递一个通道给它,它可以让你停止它,例如通过关闭通道:
func doEvery(d time.Duration, done chan bool, f func(time.Time)) {
ticker := time.NewTicker(d)
defer ticker.Stop()
for {
select {
case <-done:
fmt.Println("Done!")
return
case t := <-ticker.C:
f(t)
}
}
}
测试它:
done := make(chan bool)
go doEvery(300*time.Millisecond, done, helloworld)
time.Sleep(time.Second)
close(done)
time.Sleep(time.Second)
fmt.Println("Quitting")
这将输出(在Go Playground上尝试):
2009-11-10 23:00:00.3 +0000 UTC m=+0.300000001: Hello, World!
2009-11-10 23:00:00.6 +0000 UTC m=+0.600000001: Hello, World!
2009-11-10 23:00:00.9 +0000 UTC m=+0.900000001: Hello, World!
Done!
Quitting
- 1 回答
- 0 关注
- 135 浏览
添加回答
举报