问题

如何使下面的代码在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