From 07bbbab8fcebeb01a03d916cc2e0d26485cda270 Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 14 May 2019 11:24:10 +0800 Subject: [PATCH] =?UTF-8?q?-=20routine.callFun=E4=B8=AD=E5=BA=94=E8=AF=A5?= =?UTF-8?q?=E8=A6=81=E5=85=B3=E9=97=ADchan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/routinepool/routinepool.go | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/utils/routinepool/routinepool.go b/utils/routinepool/routinepool.go index 17115757..4ebcc111 100644 --- a/utils/routinepool/routinepool.go +++ b/utils/routinepool/routinepool.go @@ -5,6 +5,8 @@ import ( "encoding/binary" "fmt" "runtime/debug" + + "git.rosy.net.cn/baseapi/utils" ) const ( @@ -65,23 +67,27 @@ func taskFun(taskChan chan *TaskParam, index int) { } } -func (p *Pool) callFun(func4Call func(), primaryID string, isAsync bool) chan interface{} { +func (p *Pool) callFun(func4Call func(), primaryID string, isAsync bool) (r interface{}) { result := md5.Sum([]byte(primaryID)) resultInt64 := int64(binary.LittleEndian.Uint32(result[8:])) chanIndex := int(resultInt64 % int64(p.curRoutineCount)) chanParam := &TaskParam{ handler: func4Call, } - if isAsync { + if !isAsync { chanParam.resultChan = make(chan interface{}) } p.taskChans[chanIndex] <- chanParam - return chanParam.resultChan + if !isAsync { + r = <-chanParam.resultChan + close(chanParam.resultChan) + } + return r } func (p *Pool) CallFun(func4Call func(), primaryID string) { if p.curRoutineCount > 0 { - r := <-p.callFun(func4Call, primaryID, true) + r := p.callFun(func4Call, primaryID, false) if r != nil { panic(r) } @@ -94,5 +100,7 @@ func (p *Pool) CallFunAsync(func4Call func(), primaryID string) { if p.curRoutineCount == 0 { panic("CallFunAsync can not run when p.curRoutineCount == 0") } - p.callFun(func4Call, primaryID, false) + utils.CallFuncAsync(func() { + p.callFun(func4Call, primaryID, true) + }) }