/// <summary> /// 添加进入操作已经执行完成的队列 /// </summary> /// <param name="mOperator"></param> public void AddDoneOpeator(AsynOperator mOperator) { lock (mDoneOperatorLock) { this.mDoneOperators.Add(mOperator); } }
/// <summary> /// 添加进入操作还未执行队列 /// </summary> /// <param name="mOperator"></param> public void AddOpeator(AsynOperator mOperator) { lock (mQueueOperatorLock) { this.mQueueOperators.Add(mOperator); } }
/// <summary> /// 异步操作 /// </summary> protected void HandleDoneOperator() { foreach (AsynQueue mQueue in this.mAsynQueue) { int nCount = mQueue.DoneOperatorCount; for (int nIndex = 0; nIndex < nCount; ++nIndex) { AsynOperator mOperator = mQueue.PopDoneOperator(); if (mOperator == null) { continue; } // 结束 try { // 执行结束操作 mOperator.Finish(); } catch (System.Exception ex) { Console.WriteLine(ex.ToString()); } } mQueue.ExeQueueOperator = false; } }
/// <summary> /// 执行操作 /// </summary> /// <param name="mOperator"></param> protected void ExecuteOperator(AsynOperator mOperator) { // 执行开始操作 mOperator.Start(); // 扔到任务队列中 ThreadPool.QueueUserWorkItem(new WaitCallback(DoOperator), mOperator); }
/// <summary> /// 添加操作 /// </summary> /// <param name="mOperator"></param> /// <param name="mAsynType"></param> public void AddOperator(AsynOperator mOperator, AsynType mAsynType = AsynType.AT_NoOrder) { mOperator.AsynType = mAsynType; if (mOperator.AsynType < AsynType.AT_NoOrder || mOperator.AsynType >= AsynType.AT_Max) { return; } this.mAsynQueue[(int)mOperator.AsynType].AddOpeator(mOperator); }
/// <summary> /// 返回一个队列 /// </summary> /// <returns></returns> public AsynOperator PopOperator() { lock (mQueueOperatorLock) { if (this.mQueueOperators.Count <= 0) { return(null); } AsynOperator mOperator = this.mQueueOperators[0]; this.mQueueOperators.RemoveAt(0); return(mOperator); } }
/// <summary> /// 执行操作 /// </summary> /// <param name="mObj"></param> protected void DoOperator(object mObj) { if (!(mObj is AsynOperator)) { return; } AsynOperator mOperator = (AsynOperator)mObj; if (mOperator == null) { return; } // 开始执行 mOperator.Execute(); // 添加到已经完成的队列中 this.mAsynQueue[(int)mOperator.AsynType].AddDoneOpeator(mOperator); }
/// <summary> /// 执行操作 /// </summary> protected void HandleOperator() { foreach (AsynQueue mQueue in this.mAsynQueue) { int nCount = mQueue.OperatorCount; for (int nIndex = 0; nIndex < nCount; ++nIndex) { // 只有没有队形的异步才能一次执行多个 if (mQueue.ExeQueueOperator) { if (!IsNoOrderQueue(mQueue.AsynType)) { break; } } AsynOperator mOperator = mQueue.PopOperator(); if (mOperator == null) { continue; } mQueue.ExeQueueOperator = true; // 结束 try { ExecuteOperator(mOperator); } catch (System.Exception ex) { Console.WriteLine(ex.ToString()); } } } }