public void Request(Envelope <TRequest> envelope, IResponseReceiver <TResponse> request) { var thread = _workerPool.GetThreadPoolDispatcher(); var responseWaiter = new DispatchableRequest <TRequest, TResponse>(_func, envelope, Id, request); thread.DispatchAction(responseWaiter); }
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 Request(Envelope <TRequest> envelope, IResponseReceiver <TResponse> request) { var thread = _workerPool.GetAnyWorkerDispatcher(); if (thread == null) { var response = _func.Invoke(envelope); request.SetResponse(response); return; } var responseWaiter = new DispatchableRequest <TRequest, TResponse>(_func, envelope, Id, request); thread.DispatchAction(responseWaiter); }