diff --git a/cluster/router/chain/chain.go b/cluster/router/chain/chain.go
index b15b845cf11d16f1524e8dd3ed63bd8ada94f713..952aedf92d70d92b3b029a9809826295e1cc7dc5 100644
--- a/cluster/router/chain/chain.go
+++ b/cluster/router/chain/chain.go
@@ -200,12 +200,12 @@ func (c *RouterChain) buildCache() {
 		if p, ok := r.(router.Poolable); ok {
 			wg.Add(1)
 			go func(p router.Poolable) {
+				defer wg.Done()
 				pool, info := poolRouter(p, origin, invokers)
 				mutex.Lock()
 				defer mutex.Unlock()
 				cache.pools[p.Name()] = pool
 				cache.metadatas[p.Name()] = info
-				wg.Done()
 			}(p)
 		}
 	}