mirror of
https://github.com/go-eagle/eagle.git
synced 2025-10-05 16:46:59 +08:00
25 lines
591 B
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()
|
|
}()
|
|
}
|