GO语言协程超时任务
设置协程超过一定时间后退出
package main
import (
"fmt"
"time"
)
func run(done chan string) {
/*在计时器触发之前,垃圾收集器不会回收 Timer, 所以定时器不要写在select中*/
t := time.NewTimer(time.Second * time.Duration(2))
defer t.Stop()
L:
for {
select {
case <-done:
fmt.Println("run stop signal")
break L // 跳出for循环
case <-t.C:
fmt.Println("run time out")
break L // 超时跳出循环
default:
break
}
time.Sleep(time.Second * 1)
fmt.Println("run loading...")
}
fmt.Println("run exited")
<-done
}
func main() {
c := make(chan string, 1)
go run(c)
fmt.Println("main wait...")
time.Sleep(time.Second * 3)
c <- "stop"
close(c)
fmt.Println("main send stop")
time.Sleep(time.Second * 1)
fmt.Println("main exited")
}
为何使用break L 退出参考文章:
https://blog.csdn.net/u012265809/article/details/114874112