예제 #1
0
        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);
        }
예제 #2
0
 public static void Initialize()
 {
     _instance = new RestApi();
 }