gpt4 book ai didi

go - 过早触发定时器

转载 作者:IT王子 更新时间:2023-10-29 01:41:30 25 4
gpt4 key购买 nike

我有一个正在休眠一段时间的循环。但是,在我的代码的其他地方,我可能需要提前结束休眠时间,以便可以更快地执行后续逻辑。

for {
timer = time.NewTimer(30 * time.Second)
<-timer.C
// Do something
}

别处……

// Trigger timer
// timer.Trigger() ??

自然地,timer.Stop() 将停止计时器,但它随后会导致程序挂起并且不会下降到 //Do something。目前,我正在将计时器重置为非常短的持续时间,以便计时器基本上立即到期。

timer.Reset(time.Millisecond)

有更好的方法吗?

最佳答案

您可以使用取消 channel :

cancel := make(chan struct{})
for {
timer = time.NewTimer(30 * time.Second)
select {
case <- timer.C:
doSomething()
case <- cancel:
doSomething()
}
}

当您想忽略定时器并立即执行时,只需在cancel channel 上发送一条消息:

cancel <- struct{}{}

关于go - 过早触发定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44289704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com