public RequestInstance GetInstanceToExecute(RequestInstance requestInstance) { ThreadCounts availableCounts = _threading.GetAvailableThreads(); ThreadCounts activeCounts = _maxThreads.Subtract(availableCounts); int active = activeCounts.Greatest(); if (_count == 0 && active < _activeThreadsBeforeRemoteRequestsQueue) { return(requestInstance); } bool isLocal = requestInstance.IsLocal; if (_count >= _queueLengthBeforeIncomingRequestsRejected) { requestInstance.Reject(); return(null); } requestInstance.Defer(); QueueInstance(requestInstance, isLocal); if (active < _activeThreadsBeforeRemoteRequestsQueue) { return(DequeueInstance(false)); } if (active < _activeThreadsBeforeLocalRequestsQueue) { return(DequeueInstance(true)); } ScheduleExecuteIfNeeded(); return(null); }