Go 随时间超时。After的行为与随计时器或计时器超时不同
我希望以下函数的行为方式相同Go 随时间超时。After的行为与随计时器或计时器超时不同,go,Go,我希望以下函数的行为方式相同 func fillChanTimeoutUsingTicker(maxDuration time.Duration, chanSize int) chan string { c := make(chan string, chanSize) ticker := time.NewTicker(maxDuration) for { select { case <-ticker.C: ti
func fillChanTimeoutUsingTicker(maxDuration time.Duration, chanSize int) chan string {
c := make(chan string, chanSize)
ticker := time.NewTicker(maxDuration)
for {
select {
case <-ticker.C:
ticker.Stop()
fmt.Println("Ticker:operation timedout")
return c
case c <- "Random message":
default:
fmt.Println("Ticker:chan is full")
return c
}
}
}
func fillChanTimeoutUsingTimeAfter(maxDuration time.Duration, chanSize int) chan string {
c := make(chan string, chanSize)
for {
select {
case <-time.After(maxDuration):
fmt.Println("time.After:operation timedout")
return c
case c <- "Random message":
default:
fmt.Println("time.After:chan is full")
return c
}
}
}
印刷品:
Ticker:operation timedout
43979
time.After:chan is full
10000000
我以为他们的行为会完全一样,我真的不明白有什么大区别,对此有什么想法吗
注意:使用计时器也可以像在ticker函数中一样正常工作。问题出在代码中 在第一个示例中,您正在创建一个ticker并将其用于超时。
在第二个示例中,每次循环时都创建一个计时器:
case <-time.After(maxDuration):
case问题在于代码本身
在第一个示例中,您正在创建一个ticker并将其用于超时。
在第二个示例中,每次循环时都创建一个计时器:
case <-time.After(maxDuration):
case问题在于代码本身
在第一个示例中,您正在创建一个ticker并将其用于超时。
在第二个示例中,每次循环时都创建一个计时器:
case <-time.After(maxDuration):
case问题在于代码本身
在第一个示例中,您正在创建一个ticker并将其用于超时。
在第二个示例中,每次循环时都创建一个计时器:
case <-time.After(maxDuration):
案例这是问题的延续,是否只是该问题的补充/编辑,而不是新问题?(在我注意到这个单独的问题之前,我正准备对这个问题进行评论以指出这个确切的问题)。这是一个问题的延续,是否应该只是该问题的补充/编辑,而不是一个新问题?(在我注意到这个单独的问题之前,我正准备对这个问题进行评论以指出这个确切的问题)。这是一个问题的延续,是否应该只是该问题的补充/编辑,而不是一个新问题?(在我注意到这个单独的问题之前,我正准备对这个问题进行评论以指出这个确切的问题)。这是一个问题的延续,是否应该只是该问题的补充/编辑,而不是一个新问题?(在我注意到这个单独的问题之前,我正准备发表评论,指出这个确切的问题)。