增加任务运行的方法
This commit is contained in:
parent
30b6fa4c46
commit
a7552c210d
@ -19,6 +19,8 @@ type ITask interface {
|
|||||||
Name() string
|
Name() string
|
||||||
// Description 任务描述
|
// Description 任务描述
|
||||||
Description() string
|
Description() string
|
||||||
|
// GetRunID 获取任务ID
|
||||||
|
GetRunID() string
|
||||||
// Callback 任务执行的回调
|
// Callback 任务执行的回调
|
||||||
Callback(result *Result) error
|
Callback(result *Result) error
|
||||||
// Execute 执行任务
|
// Execute 执行任务
|
||||||
|
@ -15,8 +15,6 @@ package task
|
|||||||
type Config struct {
|
type Config struct {
|
||||||
// TaskName 执行的任务名称
|
// TaskName 执行的任务名称
|
||||||
TaskName string
|
TaskName string
|
||||||
// GetRunID 获取任务运行的ID
|
|
||||||
GetRunID func() string
|
|
||||||
// Async 是否异步运行
|
// Async 是否异步运行
|
||||||
Async bool
|
Async bool
|
||||||
// Timeout 单位 : 秒, <= 0认为不设置超时
|
// Timeout 单位 : 秒, <= 0认为不设置超时
|
||||||
@ -39,8 +37,6 @@ type Result struct {
|
|||||||
TaskRunID string // 任务运行ID
|
TaskRunID string // 任务运行ID
|
||||||
TaskDescription string // 任务描述
|
TaskDescription string // 任务描述
|
||||||
TaskConfig *Config // 任务配置
|
TaskConfig *Config // 任务配置
|
||||||
Async bool // 是否异步
|
|
||||||
Param map[string]interface{} // 任务参数
|
|
||||||
Data map[string]interface{} // 任务结果数据
|
Data map[string]interface{} // 任务结果数据
|
||||||
Err error // 异常信息, err == nil , 代表执行成功
|
Err error // 异常信息, err == nil , 代表执行成功
|
||||||
}
|
}
|
||||||
|
47
task.go
47
task.go
@ -10,7 +10,9 @@ package task
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"runtime"
|
||||||
"sync"
|
"sync"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -76,6 +78,47 @@ func (d *dispatch) Remove(taskNameList ...string) error {
|
|||||||
// Author : go_developer@163.com<白茶清欢>
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
//
|
//
|
||||||
// Date : 15:18 2022/6/23
|
// Date : 15:18 2022/6/23
|
||||||
func (d *dispatch) Run(ctx context.Context, cfg *Config, taskParam map[string]interface{}) (map[string]interface{}, error) {
|
func (d *dispatch) Run(ctx context.Context, cfg *Config) *Result {
|
||||||
return nil, nil
|
var (
|
||||||
|
taskInstance ITask
|
||||||
|
exist bool
|
||||||
|
)
|
||||||
|
|
||||||
|
result := &Result{
|
||||||
|
StartTime: time.Now().UnixNano(),
|
||||||
|
FinishTime: 0,
|
||||||
|
Used: 0,
|
||||||
|
TaskRunID: "",
|
||||||
|
TaskDescription: "",
|
||||||
|
TaskConfig: cfg,
|
||||||
|
Data: nil,
|
||||||
|
Err: nil,
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
result.FinishTime = time.Now().UnixNano()
|
||||||
|
result.Used = result.FinishTime - result.StartTime
|
||||||
|
if e := recover(); nil != e {
|
||||||
|
switch e.(type) {
|
||||||
|
case runtime.Error: // 运行时错误
|
||||||
|
result.Err = fmt.Errorf("出现运行时Panic : %v", e)
|
||||||
|
default: // 非运行时错误
|
||||||
|
result.Err = fmt.Errorf("出现其他场景Panic : %v", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
d.lock.RLock()
|
||||||
|
if taskInstance, exist = d.taskTable[cfg.TaskName]; !exist {
|
||||||
|
result.Err = fmt.Errorf("%v 任务未注册", cfg.TaskName)
|
||||||
|
}
|
||||||
|
result.TaskRunID = taskInstance.GetRunID()
|
||||||
|
result.TaskDescription = taskInstance.Description()
|
||||||
|
if cfg.Async {
|
||||||
|
// 异步运行
|
||||||
|
go func() {
|
||||||
|
result.Data, result.Err = taskInstance.Execute(ctx, cfg)
|
||||||
|
}()
|
||||||
|
} else {
|
||||||
|
result.Data, result.Err = taskInstance.Execute(ctx, cfg)
|
||||||
|
}
|
||||||
|
return result
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user