- refactor tasksch

- sequence task added.
- task tree added.
This commit is contained in:
gazebo
2018-10-20 09:22:36 +08:00
parent 3f94410904
commit 66ef068fc3
6 changed files with 191 additions and 83 deletions

View File

@@ -21,39 +21,35 @@ type SeqTask struct {
func NewSeqTask(taskName string, userName string, worker SeqWorkFunc, stepCount int, params ...interface{}) *SeqTask {
task := &SeqTask{
BaseTask: BaseTask{
ParallelCount: 1,
params: params,
ID: utils.GetUUID(),
Name: taskName,
CreatedAt: time.Now(),
CreatedBy: userName,
UpdatedAt: time.Now(),
TotalJobCount: stepCount,
TotalItemCount: stepCount,
quitChan: make(chan int, 1),
finishChan: make(chan int, 2),
Status: TaskStatusWorking,
},
worker: worker,
}
task.C = task.finishChan
task.Init(1, 1, false, params, taskName, userName, stepCount, stepCount)
return task
}
func (task *SeqTask) Run() *SeqTask {
go func() {
globals.SugarLogger.Debugf("Run SeqTask %s", task.Name)
func (task *SeqTask) Run() {
task.run(func() {
globals.SugarLogger.Debugf("SeqTask.Run %s", task.Name)
var taskErr error
var taskResult interface{}
var taskResult []interface{}
for i := 0; i < task.TotalItemCount; i++ {
taskResult, taskErr = task.worker(i, task.params...)
task.finishedOneJob(1, taskErr)
if taskErr != nil {
break
select {
case <-task.quitChan:
goto EndFor
default:
}
result, err := task.worker(i, task.params...)
task.finishedOneJob(1, err)
if taskErr = err; taskErr != nil {
globals.SugarLogger.Infof("SeqTask.Run %s step:%d failed with error:%v", task.Name, i, err)
if !task.IsContinueWhenError {
break
}
} else if result != nil {
taskResult = append(taskResult, utils.Interface2Slice(result)...)
}
}
EndFor:
task.locker.Lock()
if taskErr != nil { // 如果有错误,肯定就是失败了
task.Status = TaskStatusFailed
@@ -65,15 +61,14 @@ func (task *SeqTask) Run() *SeqTask {
task.Status = TaskStatusFinished
}
}
task.err = taskErr
task.result = taskResult
task.Err = taskErr
task.Result = taskResult
task.TerminatedAt = time.Now()
task.locker.Unlock()
globals.SugarLogger.Debugf("Run SeqTask %s, result:%v, err:%v", task.Name, taskResult, taskErr)
globals.SugarLogger.Debugf("SeqTask.Run %s, result:%v, err:%v", task.Name, taskResult, taskErr)
close(task.finishChan)
close(task.quitChan)
}()
return task
})
}