Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 随时间超时。After的行为与随计时器或计时器超时不同_Go - Fatal编程技术网

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):
案例这是问题的延续,是否只是该问题的补充/编辑,而不是新问题?(在我注意到这个单独的问题之前,我正准备对这个问题进行评论以指出这个确切的问题)。这是一个问题的延续,是否应该只是该问题的补充/编辑,而不是一个新问题?(在我注意到这个单独的问题之前,我正准备对这个问题进行评论以指出这个确切的问题)。这是一个问题的延续,是否应该只是该问题的补充/编辑,而不是一个新问题?(在我注意到这个单独的问题之前,我正准备对这个问题进行评论以指出这个确切的问题)。这是一个问题的延续,是否应该只是该问题的补充/编辑,而不是一个新问题?(在我注意到这个单独的问题之前,我正准备发表评论,指出这个确切的问题)。