错误点
原先自以为在自定义函数里面开辟一个新的协程,函数退出,开辟的协程也会强制退出,直到跟公司项目,看大佬写的调度才发现只有一种情况正在运行的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()
有疑问加站长微信联系(非本文作者)