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

View File

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

View File

@@ -209,14 +209,20 @@ func (t *BaseTask) MarshalJSON() ([]byte, error) {
} }
func (t *BaseTask) run(taskHandler func()) { 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() taskHandler()
for _, subTask := range t.Children { for _, subTask := range t.Children {
if _, err := subTask.GetResult(0); err != nil { if _, err := subTask.GetResult(0); err != nil {
globals.SugarLogger.Warnf("BaseTask run, failed with error:%v", err) globals.SugarLogger.Warnf("BaseTask run, failed with error:%v", err)
} }
} }
}() })
} }
func (t *BaseTask) finishedOneJob(itemCount int, err error) { 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() // 这样写的目的是强制第一次调用时要刷新一次 token, err := refreshFunc() // 这样写的目的是强制第一次调用时要刷新一次
if err == nil { if err == nil {
configSetter(token) configSetter(token)
go func() { utils.CallFuncAsync(func() {
for { for {
time.Sleep(sleepGap) time.Sleep(sleepGap)
refreshFunc() refreshFunc()
} }
}() })
} }
return err return err
} }