Ich habe einen Auswahlblock, der auf 2 Kanälen, einen Ticker und einen Timer hört:Warum wird Zeit.Nach dem Auslösen nie, wenn es mit einem Ticker in einem Auswahlblock gepaart ist?
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(5 * time.Second)
for {
select {
case z := <-ticker.C:
fmt.Printf("tick %d\n", z)
case <-time.After(12 * time.Second):
fmt.Println("12 seconds elapsed!")
}
}
}
Wenn ich den Code ausführen, der time.After
Fall nie läuft, aber der Ticker korrekt funktioniert.
Wenn ich den Ticker entfernen, time.After
Feuer richtig:
package main
import (
"fmt"
"time"
)
func main() {
for {
select {
case <-time.After(12 * time.Second):
fmt.Println("12 seconds elapsed!")
}
}
}
Es funktioniert richtig, wenn ich einen Timer statt time.After
verwendet:
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(5 * time.Second)
timer := time.NewTimer(12 * time.Second)
for {
select {
case z := <-ticker.C:
fmt.Printf("tick %d\n", z)
case <-timer.C:
fmt.Println("12 seconds elapsed!")
}
}
}
Warum passiert das das?
Ich verstehe die Frage nicht. 12sec ist immer länger als 5sec; Können Sie erklären, wie die Zeit ist? Nach _would_ feuern in weniger als 5sec? – JimB
Ich erwarte nicht, dass es in weniger als 5 Sekunden feuert. Ich erwarte ein Häkchen bei 5 Sekunden, ein weiteres Häkchen bei 10 Sekunden und bei 12 Sekunden sollte 'time.After' ausgelöst werden. Wenn ich jedoch 'time.NewTimer' verwende, um den Timer zu erstellen, wird' time.After' nie ausgelöst, egal wie lange ich warte. – F21