问题
如何使下面的代码在3秒后打印“QUIT”?
法典
package main
import (
"fmt"
"time"
)
func main() {
quit := make(chan struct{})
tasks := make(chan struct{})
go func(){
time.Sleep(1 * time.Second)
tasks <- struct{}{}
}()
go func(){
time.Sleep(3 * time.Second)
quit <- struct{}{}
}()
for {
select {
case <-quit:
fmt.Println("QUIT")
return
case <-tasks:
fmt.Println("Doing")
// do some long time jobs more than 10 seconds
time.Sleep(10 * time.Second)
}
}
}
观察
上面的代码打印“正在做”。并休眠 10 秒钟,然后打印“退出”。如何中断这种睡眠,让它在3秒后接收通道并打印“QUIT”?quit
它似乎被 阻止了,并且在 3 秒后不会从通道接收。selectcase tasksquit
九州编程
智慧大石
开满天机
相关分类