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)); }