重用timer
重用的timer的目的在于减少减少创建timer实例
参考
重置条件
- 第一步是要确定timer是否已过期,用
timer.Stop确定,true表示timer未过期,false表示timer已过期 - timer已过期,选择性抽干channel,然后调用
time.Reset - timer未过期,
timer.Stop返回true,此时不必关系channel会被删除,可以直接调用time.Reset
代码
1 | go func() { |
说明:
timer过期,之后从最小堆移除,此时调用timer.Stop会失败,失败之后需要显示抽干channeltimer未过期,调用timer.Stop成功(此时channel抽干),可以直接调用timer.Resettimer未过期,若调用timer.Stop失败,此时channel有可能之前被抽干,也有可能未被抽干,这个时候需要用select{}选择性抽干
time.timer和time.ticker的区别
time.timer一次性,到期后会从最小堆移除,可以用time.Reset实现持续运行效果time.ticker持续性,到期后执行下个周期