我正在玩频道,我在这里遇到了一些事情。我有一个循环,我想在一段设定的时间后停止,比如 5 秒,我还想将迭代去抖动 300 毫秒。
func pump() <-chan interface{} {
c := make(chan interface{})
// use for loop
// stop after 5 seconds
d := time.NewTicker(time.Millisecond * 2000)
go func() {
myLoop:
for {
select {
case <-time.After(time.Second * 5):
fmt.Println("Its five seconds")
close(c)
d.Stop()
break myLoop
default:
c <- rand.Int()
<-d.C
fmt.Println("After wait / debounce")
}
}
}()
return c
}
虽然上面的内容似乎是去抖动的,但它永远不会触发达到 5 秒的情况。我有类似的结果time.Tick(time.Second * 5)
func pump() <-chan interface{} {
c := make(chan interface{})
// use for loop
// stop after 5 seconds
d := time.NewTicker(time.Millisecond * 2000)
t := time.NewTicker(time.Second * 5)
go func() {
myLoop:
for {
select {
case <-t.C:
fmt.Println("Its five seconds")
close(c)
t.Stop()
d.Stop()
break myLoop
// case <-d.C:
// fmt.Println("its a sleep")
default:
c <- rand.Int()
// // slow down
<-d.C
// fmt.Println("After 3000 milliseconds")
}
}
}()
return c
}
func pump() <-chan interface{} {
c := make(chan interface{})
// use for loop
// stop after 5 seconds
d := time.NewTicker(time.Millisecond * 2000)
t := time.NewTicker(time.Second * 5)
go func() {
}
以上对我有用;使用另一个代码。我不明白为什么这会在前者失败的地方起作用,尤其是当 time.Tick() 在文档中被描述为等同于 time.NewTicker() 时,只暴露了通道 C。
我在这里错过了什么?代码片段有明显不同吗?
素胚勾勒不出你
相关分类