timer pattern should always involve a 'Stop()/Reset()' otherwise `time.NewTimer(duration).C` will always leak.