我希望在“daily check”之前执行“weekly updated”,如下所示。这意味着“time.Time”应该立即放置“timeChan”,而不是在主函数开始运行时等待两秒钟以上才执行。
而结果应该是这样的
weekly updated
daily check
daily check
daily check
daily check
weekly updated
daily check
daily check
daily check
daily check
...
当然,我可以只打印“每周更新”第一次,但有没有一个优雅的方法?
代码如下所示
package main
import "time"
import "fmt"
func main() {
var a int
timeChan := time.NewTicker(time.Second * 2).C
tickChan := time.NewTicker(time.Millisecond * 500).C
for {
select {
case <-timeChan:
fmt.Println("weekly updated")
a = 1
case <-tickChan:
if a == 1 {
fmt.Println("daily check")
} else {
fmt.Println("Not update?")
}
}
}
}
结果如下
Not update?
Not update?
Not update?
weekly updated
daily check
daily check
daily check
daily check
weekly updated
daily check
daily check
daily check
daily check
...
3条答案
按热度按时间u4vypkhs1#
在第一次
time.Millisecond
时设置weekly
的股票代码。然后在第一次完成时更改它。输出:
6tdlim6h2#
只要把工作放入函数中并调用它。
oo7oh9g93#
我知道这是一个迟来的回应,但我认为这可能会对某人有所帮助。
如果for语句的目的是在一个时间间隔内只触发一个函数/任务,那么您可以将工作逻辑放在select语句之前,然后使用case来触发for循环,这将导致工作逻辑在进入循环时运行。我不知道您团队的项目结构,所以如果您的select语句有许多其他的case不是要作为触发器,那就没用了,但我还是说了出来
输出: