public void AsyncSendUserPostAction(Action <object> action, object obj) { if (Thread.CurrentThread.ManagedThreadId == _loopHandle.LoopRunThreadId) { action(obj); return; } lock (lockObject) { UserPostActionQueue.Enqueue(new QueueUserAction { CallbackAction = action, State = obj }); _postFlag++; _postFlag %= 2; } if (_postFlag == 0) { _asyncHand1.AsyncSend(); return; } _asyncHand2.AsyncSend(); }
/// <summary> /// 当发送异步信号后 会调用async的callback 会执行队列里面的方法 /// </summary> /// <param name="action">callback方法</param> /// <param name="obj">callback的参数</param> public void AsyncSendUserPostAction(Action <object> action, object obj) { if (Thread.CurrentThread.ManagedThreadId == _loopHandle.LoopRunThreadId)//Listener { action(obj); return; } lock (lockObject)//因为是多线程可以同时发送唤醒消息 { //使用队列的方式 先存进队列 然后在 UserPostActionExcute 里面 POP出来执行 UserPostActionQueue.Enqueue(new QueueUserAction { CallbackAction = action, State = obj }); _postFlag++; _postFlag %= 2; } //_asyncHand1 和 _asyncHand2 交替 提高性能 if (_postFlag == 0) { _asyncHand1.AsyncSend(); return; } _asyncHand2.AsyncSend(); }