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; } }