我希望在“每日检查”之前执行“每周更新”,如下所示。这意味着"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
...发布于 2018-01-26 20:10:16
在第一次time.Millisecond时设置weekly的自动收费器。然后改变它,当它第一次完成时。
package main
import (
"fmt"
"time"
)
func main() {
var a = 0
ticker := time.NewTicker(1)
timeChan := ticker.C
tickChan := time.NewTicker(time.Millisecond * 500).C
for {
select {
case <-timeChan:
fmt.Println("weekly updated")
if a == 0 {
ticker.Stop()
timeChan = time.NewTicker(time.Second * 2).C
}
a = 1
case <-tickChan:
if a == 1 {
fmt.Println("daily check")
} else {
fmt.Println("Not update?")
}
default:
}
}
}输出:
weekly updated
daily check
daily check
daily check
daily check
weekly updated发布于 2018-01-26 23:21:03
只需将工作放在一个函数中并调用它。
var a int
timeChan := time.NewTicker(time.Second * 2).C
tickChan := time.NewTicker(time.Millisecond * 500).C
f := func() {
fmt.Println("weekly updated")
a = 1
}
f()
for {
select {
case <-timeChan:
f()
case <-tickChan:
if a == 1 {
fmt.Println("daily check")
} else {
fmt.Println("Not update?")
}
}
}https://stackoverflow.com/questions/48460922
复制相似问题