Wie signalisiere ich einer Goroutine, dass sie aufhören soll zu rennen?

Ich versuche, eine Routine zu stoppen, aber ich kann keinen Weg finden, dies zu erreichen. Ich habe darüber nachgedacht, einen zweiten Kanal zu verwenden, aber wenn ich davon lese, würde er blockieren, nicht wahr? Hier ist ein Code, der hoffentlich erklärt, was ich versuche.

package main

import "fmt"
import "time"

func main() {

    var tooLate bool

    proCh := make(chan string)

    go func() {
        for {
               fmt.Println("working")
        //if is tooLate we stop/return it
            if tooLate { 
            fmt.Println("stopped")
                return
            }
       //processing some data and send the result on proCh
            time.Sleep(2 * time.Second)
            proCh <- "processed"
            fmt.Println("done here")

        }
    }()
    select {
    case proc := <-proCh:
        fmt.Println(proc)
    case <-time.After(1 * time.Second):
        // somehow send tooLate <- true
        //so that we can stop the go routine running
        fmt.Println("too late")
    }

    time.Sleep(4 * time.Second)
    fmt.Println("finish\n")
}

Play this thing

Antworten auf die Frage(1)

Ihre Antwort auf die Frage