同时启动多个gorouting,一旦一个gorouting出错,让所有的gorouting同时退出,请问如何实现?
同时启动多个gorouting,一旦一个gorouting出错,让所有的gorouting同时退出,请问如何实现?
func main(){
for i := 0 ; i < 100 ; i ++ {
go func(j int){
if j == 99 {
panic('exit all go routines')
}
}(i)
}
time.Sleep(1*time.Second)
}
只要 goroutine 内有panic,并且这个panic没有被recover捕获,程序会直接崩溃退出。
5 回答5.5k 阅读✓ 已解决
6 回答2.7k 阅读
2 回答3.2k 阅读✓ 已解决
1 回答5.3k 阅读✓ 已解决
2 回答3.1k 阅读✓ 已解决
1 回答5.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
三种方式吧:
1、如果你的程序没有捕获
panic
,那么只要有一个 goroutine 出现了panic
整个进程都会退出。2、在 goroutine 的 defer 方法中来捕获当前协程的 panic ,如果捕获成功,调用
os.Exit(1)
来退出。3、启动协程时传递一个
context
,同时在defer 中使用recover
捕获panic
,如果成功,直接调用cancel
方法通知所有协程退出,这种方法不会使进程崩溃。