我尝试做的是,在重试下载文件5次后如果由于某种原因下载不成功,重置整个过程并转回第一步:函数{{1} }。如果成功,则继续Try()
行
但在我的情况下,它开始下载而不等待,转到ProcessSet(3);
行。
我做错了什么?为什么ProcessSet(3);
之后的后续步骤不等待try
完成?
以下是代码:
await webClient.DownloadFileTaskAsync(new Uri(response.Url), zip_path);
这是using (WebClient webClient = new WebClient())
{
webClient.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
try
{
await webClient.DownloadFileTaskAsync(new Uri(response.Url), zip_path);
}
catch (Exception e)
{
Thread.Sleep(DelayOnRetry);
Try();
}
}
SetProgressBar(40, ProgressBarStyle.Continuous);
ProcessSet(3);
函数
Try()
以下是整个代码:
https://gist.github.com/turalus/8c781b5b0c56f66f7ec17e66a3e120fc
答案 0 :(得分:4)
我建议你改变重试逻辑:
var isFileDownloaded = false;
var tryCount = 0;
while (tryCount++ < MAX_TRY_COUNT && !isFileDownloaded) {
using (WebClient webClient = new WebClient())
try{
//do stuff here
isFileDownloaded = true
}catch //log exception and Thread.Sleep
}
if (isFileDownloaded){
// update progress
} else{
//too many retries, exit app
}
答案 1 :(得分:1)
如果您使用C#6 +,
将您的Try()
方法签名设为async
,然后使用await
进行调用。
否则你需要用一个简单的布尔值改变逻辑,如 @Denis Krasakov 所示。