public EndpointInfo Balance(IReadOnlyList <EndpointInfo> availableEndpoints, BackendConfig.BackendLoadBalancingOptions loadBalancingOptions)
        {
            var matching = _selector(availableEndpoints);

            return(ThreadLocalRandom.Current.Next(0, 101) <= _variation
                ? _backingLoadBalancingStrategy.Balance(matching.ToList().AsReadOnly(), loadBalancingOptions)
                : _backingLoadBalancingStrategy.Balance(availableEndpoints.Except(matching).ToList().AsReadOnly(), loadBalancingOptions));
        }
Esempio n. 2
0
        public EndpointInfo Balance(IReadOnlyList <EndpointInfo> availableEndpoints, BackendConfig.BackendLoadBalancingOptions loadBalancingOptions)
        {
            var exceptPreferred = availableEndpoints
                                  .Except(Enumerable.Repeat(_preferredEndpoint, 1))
                                  .ToList();

            return(_isAvailable(_preferredEndpoint)
                ? _preferredEndpoint
                : _fallBackLoadBalancingStrategy.Balance(exceptPreferred.ToList().AsReadOnly(), loadBalancingOptions));
        }