internal static string PickEndpoint(string[] endpoints, string prefix) { if (_selected != null) { return(_selected); } if (_preferred != null && endpoints.Contains(_preferred) && CheckAvailability(_preferred, prefix).Item1 >= 0) { _selected = _preferred; return(_selected); } var tokenSource = new CancellationTokenSource(); var token = tokenSource.Token; var results = new Task <Tuple <int, string> > [endpoints.Length]; var i = 0; foreach (var endpoint in endpoints) { results[i] = Task.Run(() => CheckAvailability(endpoint, prefix), token); i++; } var result = RestApi.Synchronize(() => WhenAny(results, x => !CheckVendor.NotValidResponseCode(x.Item1))); _selected = CheckVendor.NotValidResponseCode(result.Item1) ? null : result.Item2; return(_selected); }
public static void Initialize() { _instance = new RestApi(); }