// Executes the asynchronous method with load balancing in case of virtual network internal TResult ExecuteAndGetWithVirtualNetworkLoadBalancing <TResult>(Func <string, Task <TResult> > method) { if (_loadBalancer == null) { return(method.Invoke(null).Result); } else { TResult result = default(TResult); int numRetries = _loadBalancer.GetNumAvailableEndpoints(); LoadBalancingHelper.Execute(() => { var endpoint = _loadBalancer.GetEndpoint(); Contract.Assert(endpoint != null, "Load balancer failed to return a worker node endpoint!"); Trace.TraceInformation("\tIssuing request to endpoint " + endpoint); try { result = method.Invoke(endpoint.ToString()).Result; _loadBalancer.RecordSuccess(endpoint); } catch (Exception) { _loadBalancer.RecordFailure(endpoint); throw; } }, new RetryOnAllExceptionsPolicy(), new NoOpBackOffScheme(), numRetries: numRetries); return(result); } }