异步下载图像功能退出,没有错误

时间:2014-10-03 05:39:46

标签: c# image xamarin async-await webclient-download

我正在编写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);

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

我能否对上述代码有所帮助?

1 个答案:

答案 0 :(得分:3)

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

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