实现这一点的方法很少,最简单,最方便的是使用其他渠道,例如:
func main() { tooLate := make(chan struct{}) proCh := make(chan string) go func() { for { fmt.Println("working") time.Sleep(1 * time.Second) select { case <-tooLate: fmt.Println("stopped") return case proCh <- "processed": //this why it won't block the goroutine if the timer expirerd. default: // adding default will make it not block } fmt.Println("done here") } }() select { case proc := <-proCh: fmt.Println(proc) case <-time.After(1 * time.Second): fmt.Println("too late") close(tooLate) } time.Sleep(4 * time.Second) fmt.Println("finishn")}
playground
您也可以研究使用
sync.Cond
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)