void thread_main() { int sessionId; while (true) { sessionId = _mSessionIdQueue.Take(); MethodContext mContext = _mSessionId2MethodContext[sessionId]; Object result; lock (this._objServiceImpl) { result = mContext.method.Invoke(mContext.obj, mContext.parameters); } mContext.setResult(result); mContext._mConsumerResetEvent.Set(); // cleanup, _mConsumerResetEvent was reset already var map = (IDictionary <int, MethodContext>)_mSessionId2MethodContext; map.Remove(sessionId); } }
Object getResponse(int sessionId) { MethodContext methodContext = _mSessionId2MethodContext[sessionId]; return(methodContext.getResult()); }
void enqueueRequest(int sessionId, MethodContext mContext) { _mSessionId2MethodContext[sessionId] = mContext; _mSessionIdQueue.Add(sessionId); }