diff --git a/registry/directory/directory.go b/registry/directory/directory.go
index 2688253609f7f6438aae1595f134f18fdacfa2d1..42d03e40bef4f078d9fd8e746119523d3d0725b2 100644
--- a/registry/directory/directory.go
+++ b/registry/directory/directory.go
@@ -255,10 +255,11 @@ func (dir *registryDirectory) IsAvailable() bool {
 func (dir *registryDirectory) Destroy() {
 	//TODO:unregister & unsubscribe
 	dir.BaseDirectory.Destroy(func() {
-		for _, ivk := range dir.cacheInvokers {
+		invokers := dir.cacheInvokers
+		dir.cacheInvokers = []protocol.Invoker{}
+		for _, ivk := range invokers {
 			ivk.Destroy()
 		}
-		dir.cacheInvokers = []protocol.Invoker{}
 	})
 }