运行时间.睡一段时间.Tick不遵守睡眠期



我很好奇,如果您在time.Tick中周期性地运行一个任务,但该任务比ticker花费的时间长,会发生什么。

Playground在这里-等待更长的时间才能看到输出(即使它说"超时"(。

为了模拟任务需要更长的时间,我使用了time.Sleep令我惊讶的是,当新的time.Tick到来时,这个time.Sleep似乎会自动过期。

问题:

  1. 有人能帮我解释一下吗
  2. 如果任务真的需要更长的时间而不使用时间,该怎么办。睡眠?当新的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)
}
}

最新更新