考慮以下示例:package mainimport ( "fmt" "time")func main() { ticker := time.NewTicker(2 * time.Second) done := make(chan bool) defer func() { fmt.Println("exiting..") done <- true close(done) }() go func(ticker *time.Ticker, done chan bool) { for { select { case <-done: fmt.Println("DONE!") break case <-ticker.C: fmt.Println("TICK!...") } } }(ticker, done) time.Sleep(7 * time.Second)}等待接收的 goroutine 從未done接收到(我猜)主 goroutine 預先完成。但是,如果我將主 goroutine 的睡眠時間更改為 8 秒,它會收到一條消息;為什么對睡眠時間有這種依賴性?是不是因為有第二個區別讓 goroutine 保持活力并且沒有足夠的時間殺死它?我該如何優雅地殺死 goroutine?
如何安全地關閉延遲塊中的通道?
慕的地6264312
2023-03-15 15:24:33