diff --git a/concurrent/concurrent.go b/concurrent/concurrent.go index 70d9e89..419f714 100644 --- a/concurrent/concurrent.go +++ b/concurrent/concurrent.go @@ -69,6 +69,10 @@ func (c *Concurrent) AsyncDoByQueue(queueId int64, fn func(), cb func(err error) return } + if queueId != 0 { + queueId = queueId % maxTaskQueueSessionId+1 + } + select { case c.tasks <- task{queueId, fn, cb}: } diff --git a/concurrent/dispatch.go b/concurrent/dispatch.go index 6094e5b..8e6a661 100644 --- a/concurrent/dispatch.go +++ b/concurrent/dispatch.go @@ -13,6 +13,7 @@ import ( ) var idleTimeout = 2 * time.Second +const maxTaskQueueSessionId = 10000 type dispatch struct { minConcurrentNum int32 @@ -35,7 +36,7 @@ func (d *dispatch) open(minGoroutineNum int32, maxGoroutineNum int32, tasks chan d.minConcurrentNum = minGoroutineNum d.maxConcurrentNum = maxGoroutineNum d.tasks = tasks - d.mapTaskQueueSession = make(map[int64]*queue.Deque[task], 1024) + d.mapTaskQueueSession = make(map[int64]*queue.Deque[task], maxTaskQueueSessionId) d.workerQueue = make(chan task) d.cbChannel = cbChannel d.queueIdChannel = make(chan int64, cap(tasks))