golang启动的协程没有办法手动关闭,比如一个注册请求,如果某些原因请求超时了,返回给客户端是超时,但服务器启动的协程还在执行注册的流程,如果用户再提交注册就会报手机号已注册。
一直没找到手动关闭协程的方法,或者别的解决超时的方法,请指点。
你可以在客户端做轮询逻辑。来不断判断。任务是否执行完。。
也可以在服务器端。。通过for{} select{} 和写通道的配合,来完成超时的判断,但是一定得主动通知到客户端。
//10s超时
ticker:=time.NewTicker(time.Duration(10)*time.Second);
for{
select{
case:<-ticker.C:
//超时逻辑在这
default:
}
}
以上手打
#5
更多评论
通过 chan 和 goroutine 通讯来实现?或者看看 [Context](http://docs.studygolang.com/pkg/context/#WithTimeout) 包?
#1