У меня есть фрагмент:
func TestTicks(t *testing.T) {
go func() {
for range time.Tick(600 * time.Millisecond) {
log.Println("Tick")
}
}()
time.Sleep(5000 * time.Millisecond)
}
Имеет смысл напечатать 8 строк (5000 дел. 600 = 8):
2020/04/15 14:51:08 Tick
2020/04/15 14:51:09 Tick
2020/04/15 14:51:09 Tick
2020/04/15 14:51:10 Tick
2020/04/15 14:51:10 Tick
2020/04/15 14:51:11 Tick
2020/04/15 14:51:12 Tick
2020/04/15 14:51:12 Tick
Однако, это становится не слишком ясно когда я добавлю Sleep()
внутрь:
func TestTicks(t *testing.T) {
go func() {
for range time.Tick(600 * time.Millisecond) {
log.Println("Tick")
time.Sleep(500 * time.Millisecond)
}
}()
time.Sleep(5000 * time.Millisecond)
}
Я ожидаю, что он будет напечатан 4 раза (5000 дел. 1100 = 4). Но на самом деле он все равно печатается 8 раз:
2020/04/15 14:53:17 Tick
2020/04/15 14:53:18 Tick
2020/04/15 14:53:18 Tick
2020/04/15 14:53:19 Tick
2020/04/15 14:53:19 Tick
2020/04/15 14:53:20 Tick
2020/04/15 14:53:21 Tick
2020/04/15 14:53:21 Tick
Почему внутренний Sleep()
не влияет на выполнение?
Если я изменю его еще больше:
func TestTicks(t *testing.T) {
go func() {
for range time.Tick(1000 * time.Millisecond) {
log.Println("Tick")
time.Sleep(1000 * time.Millisecond)
}
}()
time.Sleep(5000 * time.Millisecond)
}
Он печатается 4 раза, хотя я ожидаю, что он будет напечатан только 2 (5000 дел. 2000 = 2).
Мне кажется, я не понимаю, как вещи Sleep()
и for range time.Tick()
работают вместе ...