- use utils.CallFuncAsync when possible.

This commit is contained in:
gazebo
2018-10-20 12:02:52 +08:00
parent 2308abb775
commit 2bfa5fe17f
4 changed files with 14 additions and 8 deletions

View File

@@ -107,7 +107,7 @@ func (m *DurableTaskMan) StartTask(taskID string) error {
d := m.tasks[taskID]
if d.cmdChan == nil {
d.cmdChan = make(chan string)
go func() {
utils.CallFuncAsync(func() {
failedItemCount := 0
for _, taskItem := range d.items {
if taskItem.Status == 0 {
@@ -137,7 +137,7 @@ func (m *DurableTaskMan) StartTask(taskID string) error {
d.data.UpdatedAt = d.data.FinishedAt
dao.UpdateEntity(nil, d.data, "Status", "FinishedAt", "UpdatedAt")
}
}()
})
return nil
}
return errors.New("任务已经启动")

View File

@@ -116,7 +116,7 @@ func (task *ParallelTask) Run() {
task.run(func() {
globals.SugarLogger.Debugf("ParallelTask.Run %s", task.Name)
for i := 0; i < task.ParallelCount; i++ {
go func() {
utils.CallFuncAsync(func() {
var chanRetVal interface{}
retVal := make([]interface{}, 0)
for {
@@ -152,7 +152,7 @@ func (task *ParallelTask) Run() {
task.subFinishChan <- chanRetVal
}
task.locker.RUnlock()
}()
})
}
for _, job := range task.jobList {
task.taskChan <- job

View File

@@ -209,14 +209,20 @@ func (t *BaseTask) MarshalJSON() ([]byte, error) {
}
func (t *BaseTask) run(taskHandler func()) {
go func() {
utils.CallFuncAsync(func() {
defer func() {
if r := recover(); r != nil {
globals.SugarLogger.Errorf("panic in BaseTask.run task:%s, task detail:%s", t.Name, utils.Format4Output(t, false))
}
}()
taskHandler()
for _, subTask := range t.Children {
if _, err := subTask.GetResult(0); err != nil {
globals.SugarLogger.Warnf("BaseTask run, failed with error:%v", err)
}
}
}()
})
}
func (t *BaseTask) finishedOneJob(itemCount int, err error) {

View File

@@ -79,12 +79,12 @@ func RefreshConfig(configKey string, expiresTime time.Duration, configGetter fun
token, err := refreshFunc() // 这样写的目的是强制第一次调用时要刷新一次
if err == nil {
configSetter(token)
go func() {
utils.CallFuncAsync(func() {
for {
time.Sleep(sleepGap)
refreshFunc()
}
}()
})
}
return err
}