C# 异步下载映像函数将无错误退出

C# 异步下载映像函数将无错误退出,c#,image,xamarin,async-await,webclient-download,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 { byt

我正在编写一个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
。这样,您可以检查函数何时完成,并且
downloadsyncfile
中抛出的异常可以在函数外部传播。有关最佳做法的更多建议,请参阅。Void-returning
async
方法几乎只用于事件处理程序。

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


您的方法应该返回
Task
,而不是
void
。这样,您可以检查函数何时完成,并且
downloadsyncfile
中抛出的异常可以在函数外部传播。有关最佳做法的更多建议,请参阅。Void-returning
async
方法几乎只用于事件处理程序。

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


您的方法应该返回
Task
,而不是
void
。这样,您可以检查函数何时完成,并且
downloadsyncfile
中抛出的异常可以在函数外部传播。有关最佳做法的更多建议,请参阅。Void-returning
async
方法几乎只用于事件处理程序。

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

您的方法应该返回
Task
,而不是
void
。这样,您可以检查函数何时完成,并且
downloadsyncfile
中抛出的异常可以在函数外部传播。有关最佳做法的更多建议,请参阅。Void-returning
async
方法几乎只用于事件处理程序