public void Scatter(Envelope <TRequest> request, IGatherReceiver <TResponse> scatter) { var action = new DispatchableScatter <TRequest, TResponse>(_action, request, Id, Name, scatter); var context = _workerPool.GetThreadPoolDispatcher(); context.DispatchAction(action); }
public void Scatter(Envelope <TRequest> request, IGatherReceiver <TResponse> scatter) { var thread = _workerPool.GetFreeWorkerDispatcher(); 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); }