我很好奇,如果您在time.Tick
中周期性地运行一个任务,但该任务比ticker花费的时间长,会发生什么。
Playground在这里-等待更长的时间才能看到输出(即使它说"超时"(。
为了模拟任务需要更长的时间,我使用了time.Sleep
令我惊讶的是,当新的time.Tick
到来时,这个time.Sleep
似乎会自动过期。
问题:
- 有人能帮我解释一下吗
- 如果任务真的需要更长的时间而不使用时间,该怎么办。睡眠?当新的
time.Tick
来了,但上一个任务没有完成时会发生什么
time.Tick
不影响time.Sleep
。
您打印的是股票行情步进时间,而不是实际时间。
尝试
package main
import (
"fmt"
"time"
)
func main() {
var i int
c := time.Tick(5 * time.Second)
for next := range c {
i++
fmt.Printf("%d) %vn", i, next)
fmt.Printf("%d) %vn", i, time.Now())
time.Sleep(8 * time.Second)
fmt.Printf("%d) finished sleepingn", i)
}
}