Browse Source

修复一个多进程存取的冲突

大爷 1 year ago
parent
commit
5d45d7110c
1 changed files with 3 additions and 4 deletions
  1. 3 4
      Common/CommonAI/Zone/Instance/InstanceZone.cs

+ 3 - 4
Common/CommonAI/Zone/Instance/InstanceZone.cs

@@ -13,6 +13,7 @@ using CommonLang.Log;
 using CommonLang.Property;
 using CommonLang.Vector;
 using System;
+using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Diagnostics;
 using static CommonAI.Zone.SpellTemplate;
@@ -46,7 +47,7 @@ namespace CommonAI.Zone.Instance
         private IQuestAdapter mQuestAdapter;
 
         private SyncMessageQueue<Action> mSyncActionQueue = new SyncMessageQueue<Action>();
-        private Queue<Event> mSendingEvents = new Queue<Event>();
+        private ConcurrentQueue<Event> mSendingEvents = new ConcurrentQueue<Event>();
         private InstanceZoneObjectMap mObjects;
 
         public TemplateManager Templates { get { return mTemplates; } }
@@ -535,10 +536,8 @@ namespace CommonAI.Zone.Instance
             }
             sync_pos_list.Clear();
 
-            while (mSendingEvents.Count > 0)
+            while (mSendingEvents.TryDequeue(out Event evt))
             {
-                Event evt = mSendingEvents.Dequeue();
-
                 //log.Info("---->onEvent:" + evt.ToString());
                 mListener.onEventHandler(evt);
                 if (mOnPostEvent != null)