public void Download(MultiMirrorFileDownloadSpec spec) {
spec.Start();
try {
while (true) {
var host = _mirrorStrategy.GetHost();
if (TryDownload(spec, host))
break;
ResetSpec(spec);
Thread.Sleep(MillisecondsTimeout);
}
} catch (Exception) {
spec.Fail();
throw;
}
}