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")
}