// 완료된 쿼리 처리 public void ProcessFinishedQueries() { uint maxProcess = MaxProcessFinishedQueryPerFrame; for (uint numProcess = 0; numProcess < maxProcess; ++numProcess) { ReqQueryData qd = null; lock (FinishedQueryGroups) { if (FinishedQueryGroups.Count == 0) { break; } qd = FinishedQueryGroups.Dequeue(); } if (qd == null) { continue; } try { Utility.InvokeSafe(qd.OnComplete, qd.IsSuccess, qd.ReqQueries.ToArray()); } catch (Exception ex) { NLog.LogManager.GetCurrentClassLogger().Error(ex); } } }
// 쿼리 요청 public void ReqQuery(DBQuery[] queries, Action <bool, DBQuery[]> onComplete = null) { var qd = new ReqQueryData(); qd.OnComplete = onComplete; qd.ReqQueries.AddRange(queries); lock (ReqQueryGroups) { qd.ContainerNode = ReqQueryGroups.AddLast(qd); } foreach (var it in queries) { it.UserData = qd; var dbInstance = GetDBInstance(it.DBType); if (dbInstance != null) { dbInstance.RequestExecuteQuery(it); } else { Utility.InvokeSafe(onComplete, false, queries); } } }