在使用协程的过程中,可能会遇到协程执行任务卡住的问题,这时候可以使用以下方式实现对于协程的超时管控。
首先,创建一个管道,用于存放执行结束的信号。
var chs chan string = make(chan string,1)
模拟一个工作函数,使用time睡眠5秒钟
func write(){
time.Sleep(5*time.Second)
chs<- "Ok"
}
创建一个函数,设置超时时间,超时自动退出
func time_out(){
for{
select {
case ch1:=<-chs:
fmt.Println(ch1)
return
case <-time.After(time.Second*3):
fmt.Println("read time out")
return
}
}
}
该函数,在获取到time.After以后,表示已经超时,执行return,退出for循环及函数。
在Main函数中的使用
func main() {
go write()
time_out()
}