为了账号安全,请及时绑定邮箱和手机立即绑定

提前执行定时器功能

提前执行定时器功能

C#
慕雪6442864 2022-07-11 10:23:29
使用时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 中启动。


查看完整回答
反对 回复 2022-07-11
?
慕标5832272

TA贡献1966条经验 获得超4个赞

是的。根据AfterFunc(强调我的)的文档:


AfterFunc 等待持续时间过去,然后在自己的 goroutine 中调用 f。它返回一个 Timer,可用于使用其 Stop 方法取消调用。


至于如何提前实际执行函数,一旦定时器停止,就没有理由去想它了。你现在有一个想要执行的函数,所以现在就执行它,就像任何其他函数一样。


t := time.AfterFunc(dur, fn)

if t.Stop() {

   go fn()

}


查看完整回答
反对 回复 2022-07-11
  • 2 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信