Try-catch不会在

时间:2017-03-29 10:01:54

标签: c# asynchronous async-await try-catch

我尝试做的是,在重试下载文件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

2 个答案:

答案 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 所示。