- refacor routinePoll CallFunc.
This commit is contained in:
@@ -58,22 +58,30 @@ func taskFun(taskChan chan *TaskParam, index int) {
|
||||
for {
|
||||
taskParam := <-taskChan
|
||||
// baseapi.SugarLogger.Debugf("routine:%d, handle task:%v", index, taskParam.handler)
|
||||
taskParam.resultChan <- callHandler(taskParam.handler)
|
||||
result := callHandler(taskParam.handler)
|
||||
if taskParam.resultChan != nil {
|
||||
taskParam.resultChan <- result
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (p *Pool) callFun(func4Call func(), primaryID string, isAsync bool) chan 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 {
|
||||
chanParam.resultChan = make(chan interface{})
|
||||
}
|
||||
p.taskChans[chanIndex] <- chanParam
|
||||
return chanParam.resultChan
|
||||
}
|
||||
|
||||
func (p *Pool) CallFun(func4Call func(), primaryID string) {
|
||||
if p.curRoutineCount > 0 {
|
||||
result := md5.Sum([]byte(primaryID))
|
||||
resultInt64 := int64(binary.LittleEndian.Uint32(result[8:]))
|
||||
chanIndex := int(resultInt64 % int64(p.curRoutineCount))
|
||||
|
||||
chanParam := &TaskParam{
|
||||
handler: func4Call,
|
||||
resultChan: make(chan interface{}),
|
||||
}
|
||||
p.taskChans[chanIndex] <- chanParam
|
||||
r := <-chanParam.resultChan
|
||||
r := <-p.callFun(func4Call, primaryID, true)
|
||||
if r != nil {
|
||||
panic(r)
|
||||
}
|
||||
@@ -81,3 +89,10 @@ func (p *Pool) CallFun(func4Call func(), primaryID string) {
|
||||
func4Call()
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user