time.After -> time.NewTimer

time.After is expensive under high QPS situations because the
timer keeps running till the event fires. So, the number of channels
and timers can accumulate.
Merge branch 'vtocc'