82 lines
1.5 KiB
Go
82 lines
1.5 KiB
Go
// Package task ...
|
|
//
|
|
// Description : task ...
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 2022-06-23 15:13
|
|
package task
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"sync"
|
|
)
|
|
|
|
var (
|
|
// Dispatch 调度实例
|
|
Dispatch *dispatch
|
|
)
|
|
|
|
func init() {
|
|
Dispatch = &dispatch{
|
|
lock: &sync.RWMutex{},
|
|
taskTable: make(map[string]ITask),
|
|
}
|
|
}
|
|
|
|
// dispatch 任务调度
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 15:14 2022/6/23
|
|
type dispatch struct {
|
|
// 锁
|
|
lock *sync.RWMutex
|
|
// 任务表
|
|
taskTable map[string]ITask
|
|
}
|
|
|
|
// Register 注册任务
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 15:16 2022/6/23
|
|
func (d *dispatch) Register(taskInstanceList ...ITask) error {
|
|
d.lock.Lock()
|
|
defer d.lock.Unlock()
|
|
for _, taskInstance := range taskInstanceList {
|
|
if nil == taskInstance {
|
|
continue
|
|
}
|
|
if _, exist := d.taskTable[taskInstance.Name()]; exist {
|
|
return fmt.Errorf("%s 任务重复注册! ", taskInstance.Name())
|
|
}
|
|
d.taskTable[taskInstance.Name()] = taskInstance
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Remove 移除任务
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 15:16 2022/6/23
|
|
func (d *dispatch) Remove(taskNameList ...string) error {
|
|
d.lock.Lock()
|
|
defer d.lock.Unlock()
|
|
for _, taskName := range taskNameList {
|
|
delete(d.taskTable, taskName)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Run 执行任务
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 15:18 2022/6/23
|
|
func (d *dispatch) Run(ctx context.Context, cfg *Config, taskParam map[string]interface{}) (map[string]interface{}, error) {
|
|
return nil, nil
|
|
}
|