Вот такой простой на виду код из
prometheus/scrape:
for {
select {
case <-m.graceShut:
return
case <-ticker.C:
select {
case <-m.triggerReload:
m.reload()
case <-m.graceShut:
return
}
}
}
Вроде все понятно: ждем периодического сигнала от
time.Ticker
, после получения такого сигнала ждем сигнала на перезагрузку (
triggerReload
). Вопрос - а зачем тут вообще нужен
Ticker
? Почему просто не вложить в
for
один единственный
select
:
for {
select {
case <-m.triggerReload:
m.reload()
case <-m.graceShut:
return
}
}
И в том и в другом случае код будет ждать сигнала. Только в первом сначала из
time.Ticker
, потом из
triggerReload
. А вот втором - сразу из
triggerReload
.