3
預計:待後大約完成。 2秒方面取消不退出
實際:無限期地運行。
不明白這可能是導致其無限期投放。
package main
import (
"context"
"fmt"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
for i := range generator(ctx) {
select {
case <-time.After(2 * time.Second):
cancel()
return
default:
fmt.Println(i)
}
}
}
func generator(ctx context.Context) <-chan int {
ch := make(chan int)
go func() {
count := 0
for {
select {
case <-ctx.Done():
return
case ch <- count:
count++
}
}
}()
return ch
}
謝謝。對我來說多麼愚蠢的小姐! – technologyblogger
順便說一下,這相當於'context.WithTimeout(context.Background(),2 * time.Second)'(並且沒有顯式定時器)。 – Peter
不錯的加法@Peter –