protected void TryDownloadFile(MultiMirrorFileDownloadSpec spec, Uri host) { try { _downloader.Download(BuildSpec(spec, host)); } catch (Exception ex) { if (!(ex is IProgramError)) { _mirrorStrategy.Failure(host); } else { _mirrorStrategy.ProgramFailure(); } throw; } _mirrorStrategy.Success(host); }