使用时time.AfterFunc,是否可以提前执行定时器功能,取消该功能的未来执行?编辑:我能想到的最好的方法是保持一个函数指针与定时器平行,该指针指向与定时器注册的相同函数。然后您可以调用此函数并调用 timer.Stop()。不过,我的问题仍然存在:计时器是否有一种固有的方法可以做到这一点?
2 回答
绝地无双
TA贡献1946条经验 获得超4个赞
您可以简单地停止计时器并将其重置为零,使其立即触发:
t := time.AfterFunc(d, f)
// later
if t.Stop() {
t.Reset(0)
}
在操场上试试:https: //play.golang.org/p/yKBa0Mp_mUm
注意需要检查stop的返回值,否则该函数可能会被多次调用:
对于使用 AfterFunc(d, f) 创建的计时器,如果 t.Stop 返回 false,则计时器已经过期,并且函数 f 已在其自己的 goroutine 中启动。
慕标5832272
TA贡献1966条经验 获得超4个赞
是的。根据AfterFunc(强调我的)的文档:
AfterFunc 等待持续时间过去,然后在自己的 goroutine 中调用 f。它返回一个 Timer,可用于使用其 Stop 方法取消调用。
至于如何提前实际执行函数,一旦定时器停止,就没有理由去想它了。你现在有一个想要执行的函数,所以现在就执行它,就像任何其他函数一样。
t := time.AfterFunc(dur, fn)
if t.Stop() {
go fn()
}
- 2 回答
- 0 关注
- 123 浏览
添加回答
举报
0/150
提交
取消