Beispiel #1
0
        private HttpWebResponse AttemptRetriableHttpRequest(
            String method, String url, String auth, String date, String cannonParams, int timeout)
        {
            int backoffMs = INITIAL_BACKOFF_MS;

            while (true)
            {
                // Do the request and process the result.
                HttpWebRequest  request = PrepareHttpRequest(method, url, auth, date, cannonParams, timeout);
                HttpWebResponse response;
                try
                {
                    response = (HttpWebResponse)request.GetResponse();
                }
                catch (WebException ex)
                {
                    response = (HttpWebResponse)ex.Response;
                    if (response == null)
                    {
                        throw;
                    }
                }

                if (response.StatusCode != (HttpStatusCode)RATE_LIMIT_HTTP_CODE || backoffMs > MAX_BACKOFF_MS)
                {
                    return(response);
                }

                sleepService.Sleep(backoffMs + randomService.GetInt(1001));
                backoffMs *= BACKOFF_FACTOR;
            }
        }