1 回答
TA貢獻(xiàn)1872條經(jīng)驗 獲得超4個贊
time.Tick()無法停止的狀態(tài)文檔:
Tick 是 NewTicker 的便捷包裝器,僅提供對 ticking 通道的訪問。雖然 Tick對于不需要關(guān)閉 Ticker 的客戶端很有用,但請注意,如果沒有辦法將其關(guān)閉,則底層 Ticker 無法被垃圾收集器恢復(fù);它“泄漏”。
如果您需要停止它,請改用它time.NewTicker()。在一個新的 goroutine 中運(yùn)行doEvery(),并傳遞一個通道給它,它可以讓你停止它,例如通過關(guān)閉通道:
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 關(guān)注
- 172 瀏覽
添加回答
舉報
