考慮以下示例: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 預(yù)先完成。但是,如果我將主 goroutine 的睡眠時(shí)間更改為 8 秒,它會(huì)收到一條消息;為什么對(duì)睡眠時(shí)間有這種依賴性?是不是因?yàn)橛械诙€(gè)區(qū)別讓 goroutine 保持活力并且沒(méi)有足夠的時(shí)間殺死它?我該如何優(yōu)雅地殺死 goroutine?
如何安全地關(guān)閉延遲塊中的通道?
慕的地6264312
2023-03-15 15:24:33