golang 编程笔记

【golang】函数结束后,函数中的goroutine退出机制

2020-03-12  本文已影响0人  dongzd

错误点

原先自以为在自定义函数里面开辟一个新的协程,函数退出,开辟的协程也会强制退出,直到跟公司项目,看大佬写的调度才发现只有一种情况正在运行的goroutine会因为其他goroutine的结束被终止,就是main函数的退出或程序停止执行

在项目中要想,协程执行超出时间,放弃协程的结果可以使用:

ctx, cancel := context.WithCancel(context.Background())
time.AfterFunc(module.GetTimeoutDuration(), func() {
    cancel()
})
go func() {
    result, err = module.ExecuteRule(mc, ruleRaw)

    result = dirtyRestoreRuleParam(mc, result, ruleRaw)
    if err != nil {
        result.Error = err.Error()
    }
    cancel()
}()
<-ctx.Done()
上一篇下一篇

猜你喜欢

热点阅读