C# Xamarin android下载在第二次尝试后挂起

C# Xamarin android下载在第二次尝试后挂起,c#,android,xamarin.forms,polly,C#,Android,Xamarin.forms,Polly,我真的很难理解下面的代码。 目前正在开发Xamarin Android应用程序。 我正在从Web服务器下载文件,但如果网络中断,我想重试几次下载。但是在第二次抛出异常后,它不再继续下载。 第一次,它就像一个符咒 我也在没有使用Polly的情况下尝试了它,并且在内置延迟的情况下递归地尝试了它。但是没有运气。抛出异常后,下载不再继续。 :-(你知道这是什么原因吗? 安卓9.0内置了什么 等待策略 .Handle() .或() .或() .WaitAndRetryAsync(新[] { 时间跨度从秒(

我真的很难理解下面的代码。 目前正在开发Xamarin Android应用程序。 我正在从Web服务器下载文件,但如果网络中断,我想重试几次下载。但是在第二次抛出异常后,它不再继续下载。 第一次,它就像一个符咒

我也在没有使用Polly的情况下尝试了它,并且在内置延迟的情况下递归地尝试了它。但是没有运气。抛出异常后,下载不再继续。 :-(你知道这是什么原因吗? 安卓9.0内置了什么

等待策略
.Handle()
.或()
.或()
.WaitAndRetryAsync(新[]
{
时间跨度从秒(1),
时间跨度从秒(5),
时间跨度。从秒(10)
})
.ExecuteAsync(异步()=>
{
totalRead=等待下载文件(url、进度、totalRead、令牌);
});
以下是
DownloadFile
OpenStream
函数

private async Task DownloadFile(字符串url、IProgress progress、long totalRead、CancellationToken)
{
//步骤1:使用HttpClient获取调用
var response=wait_client.GetAsync(url,HttpCompletionOption.ResponseHeadersRead,token);
如果(!response.issucessStatusCode)
{
抛出新异常(string.Format(“返回HTTP状态代码{0}的请求”,response.StatusCode));
}
//步骤2:文件名
var fileName=url.Split('/').Last();
var buffer=新字节[bufferSize];
//步骤3:获取总数据量
var totalData=response.Content.Headers.ContentLength.GetValuerDefault(-1L);
//步骤4:获取完整路径
var filePath=Path.Combine(_fileService.GetStorageFolderPath(),fileName);
//步骤5:下载数据
使用(var fileStream=OpenStream(filePath,totalRead))
{
使用(var inputStream=await response.Content.ReadAsStreamAsync())
{
int字节读取;
而((bytesRead=inputStream.Read(buffer,0,buffer.Length))>0)
{
totalRead+=字节读取;
//在磁盘上写入数据。
等待fileStream.WriteAsync(缓冲区,0,字节读取);
进度报告((totalRead*1d)/(totalData*1d)*100);
}
进度报告(0);
}
}
返回totalRead;
}
私有流OpenStream(字符串路径,长totalRead)
{
如果(totalRead>0)
{
返回新的文件流(路径、FileMode.Append、FileAccess.Write、FileShare.None、bufferSize);
}
其他的
{
返回新的文件流(路径、FileMode.Create、FileAccess.Write、FileShare.None、bufferSize);
}
}

您提到“例外情况”两次没有提供任何关于异常是什么或导致异常的具体细节下载过程中抛出的异常就是我在代码中提到的,我用android模拟器模拟了网络中断,它有三个可能的异常-它抛出所有三个?还是只抛出一个?堆栈跟踪是什么?发生了什么Polly中的s表示DownloadFile函数执行,DownloadFile函数可以引发三种可能的异常(NetworkOnMainThreadException、UnknownHostException或SSLexException)。不是同时出现所有三个。然后,如果其中一个出现,Polly会捕获这些异常并忽略它们。因为这是网络中断的结果。它会再次尝试下载文件功能。Ini添加了完整的下载文件功能