golang 函数结束后 goroutine退出机制

目录

错误理解

正确理解

协程超时放弃实例


错误理解

原先自以为在自定义函数里面开辟一个新的协程,函数退出,开辟的协程也会强制退出,

正确理解

只有一种情况正在运行的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()

猜你喜欢

转载自blog.csdn.net/whatday/article/details/121282766