Although some would argue that Exceptions should be thrown and handled one level up. I tend to think there are plenty of cases where by after an Exception is thrown it makes total sense to Retry the operation N number of times before finally Re-throwing the Exception up the Call stack. One of these such cases is the simple act of Downloading a file from a Remote Server. Although the code is very simple, WebClient.DownloadFile can and does fail frequently for a host of different reasons. Consider the following example which simply tries to download a remote Uri to a local file path. private int maxRetries = 5; private int retriesCounter; public void Download( string uri, string targetFilePath) { try { var webClient = new WebClient (); webClient.DownloadFile(uri, targetFilePath); retriesCounter = 0; } catch ( WebException webEx) {...