go协程超时后怎么中断协程执行的任务

fengweiqiang · · 2171 次点击
```go package main import ( "log" "time" ) func main() { cb := make(chan bool, 1) go func() { timer2 := time.NewTimer(time.Second * 5) select { case <-timer2.C: log.Println(222) cb <- true case <-cb: return } }() log.Println() timer := time.NewTimer(time.Second * 2) select { case <-timer.C: log.Println("time out") cb <- false case tmp := <-cb: log.Println(tmp) } time.Sleep(time.Second * 10) log.Println(123) } ```
#1
更多评论
timer2 再定义一个的话没法执行逻辑代码吧![3.png](https://static.studygolang.com/190925/00dc87f4e4fe9d54ae393163943b5fa5.png)
#2
以上实现的是超时时不执行log.Println(222),你指的业务逻辑不是log.Println(222),难道是time.sleep? Go语言并没有提供在一个goroutine中终止另一个goroutine的方法。只能通过通信让goroutine主动退出
#3