Files
eagle/pkg/async/async.go

25 lines
591 B
Go

package async
import (
"context"
"github.com/go-eagle/eagle/pkg/log"
"github.com/go-eagle/eagle/pkg/utils"
)
// Go 异步执行 asyncFunc() 函数,会进行 recover() 操作,如果出现 panic() 则会记录日志
// name 用于 recover 后的日志和 metrics 统计
func Go(ctx context.Context, name string, asyncFunc func()) {
go func() {
defer func() {
if err := recover(); err != nil {
stack := utils.StackTrace(name, err)
log.WithContext(ctx).Errorf("async: name: %s panic: %s stack: %s", name, err, stack)
// TODO: metrics
}
}()
asyncFunc()
}()
}