示例#1
0
        public void Request(Envelope <TRequest> envelope, IResponseReceiver <TResponse> request)
        {
            var thread = _workerPool.GetDispatcher(_threadId, false);

            if (thread == null)
            {
                request.SetNoResponse();
                return;
            }

            var responseWaiter = new DispatchableRequest <TRequest, TResponse>(_func, envelope, Id, request);

            thread.DispatchAction(responseWaiter);
        }
        public void Scatter(Envelope <TRequest> request, IGatherReceiver <TResponse> scatter)
        {
            var thread = _workerPool.GetDispatcher(_threadId, false);

            if (thread == null)
            {
                ImmediateParticipant <TRequest, TResponse> .GetResponses(Id, _func, request, scatter, Name);

                return;
            }

            var responseWaiter = new DispatchableScatter <TRequest, TResponse>(_func, request, Id, Name, scatter);

            thread.DispatchAction(responseWaiter);
        }
 public IActionDispatcher GetDispatcher(int threadId, bool allowAutoCreate)
 {
     return(_inner.GetDispatcher(threadId, allowAutoCreate));
 }
        public void Publish(Envelope <TPayload> message)
        {
            var thread = _workerPool.GetDispatcher(_threadId, true);

            thread?.DispatchAction(new PublishEventThreadAction <TPayload>(_action, message));
        }