正在异步下载映像,函数退出,没有任何错误

本文关键字:任何 错误 退出 函数 异步 下载 映像 | 更新日期: 2023-09-27 18:25:22

我正在编写一个Xamarin应用程序,并尝试异步下载一个图像,然后将该图像保存到文件中。

这是我的代码:

public async void DownloadAsyncFile(string webAddress, string fileName)
{
    var webClient = new WebClient ();
    var uri = new Uri (webAddress);
    byte[] bytes = null;
    try
    {
        bytes = await webClient.DownloadDataTaskAsync(uri);
        CreateFolderFromFileName (fileName);
        File.WriteAllBytes(fileName, bytes);
    }
    catch(TaskCanceledException){
        System.Console.WriteLine ("Task Canceled!");
        return;
    }
    catch(Exception e){
        System.Console.WriteLine (e.ToString());
        return;
    }
}
public void CreateFolderFromFileName(string fileName)
{
    string folderName = GetFolderPathFromFileName (fileName);
    System.IO.Directory.CreateDirectory(folderName);
}

代码正在执行,但是,DownloadAsyncFile函数退出到函数中的最后一行代码:

bytes = await webClient.DownloadDataTaskAsync(uri);

发生这种情况时不会显示任何错误。

我能在上面的代码方面得到一些帮助吗?

正在异步下载映像,函数退出,没有任何错误

async就是这样工作的。该函数一直运行到第一个等待,然后返回。该方法的其余部分将在异步任务完成后执行。编译器生成一个状态机来执行此操作,它基本上将方法的其余部分注册为延续。

您的方法应该返回Task而不是void。这样,您就可以检查函数何时完成,并且在DownloadAsyncFile内部引发的异常可以在函数外部传播。有关最佳实践的更多建议,请参阅异步编程中的最佳实践。返回Void的async方法几乎只适用于事件处理程序。