请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

子协程panic的后续执行顺序问题

子协程panic之后,为什么如果不用sleep函数连“出错了“都不报就终止了?如果直接终止程序的话那为什么加上sleep还能继续执行?

正在回答 回答被采纳积分+3

1回答

bobby 2023-02-17 18:53:59

你贴一下完整的代码我运行试试

0 回复 有任何疑惑可以回复我~
  • 提问者 0沉默使者0 #1
    func f1()
        defer func {
            err  := recover()
            if err != nil {
                fmt.Println("捕获到了")
            }
        }()
    
        go func() {
            panic("出错了")
        }()
        time.Sleep(10*time.Second)
    }
    func main() {
        f1()
    }
    我想问的是,在没有time.Sleep的情况下既然子协程panic会直接杀死主线程,连子协程panic里的“出错了”这一步都不打印就直接挂掉over了。凭什么加上sleep之后,sleep这行代码还能执行而不是直接挂掉?。是因为即使子协程panic之后依然要跑完主线程main的程序然后再带着子协程一起挂掉吗?主线程的程序优先级那么高吗?比panic还要高?
    回复 有任何疑惑可以回复我~ 2023-02-18 20:51:44
  • bobby 回复 提问者 0沉默使者0 #2
    不是sleep的问题。你panic的代码recover之后 f1就正常退出了,代码都完结了,当然主线程也就退出了?和sleep没有关系
    回复 有任何疑惑可以回复我~ 2023-02-19 13:17:31
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号