下载文件的异步方法在下载文件之前返回

时间:2018-04-05 13:28:29

标签: c#

我有一个下载文件的异步方法。

public async Task DownloadFile()
{
   await doDownload();
}

我从main方法中调用此方法。我面临的问题是异步方法在下载文件之前返回。

在main方法中使用Thread.Sleep()可以解决问题。有没有更好的方法来实现这个目标?

1 个答案:

答案 0 :(得分:0)

最好不要睡眠主线程,因为它会杀死响应并引入死锁的可能性。如果您的下载时间比您睡眠时间长,那么它将失败。如果您循环睡眠以解决此问题且文件永远不会下载,您可以永远睡眠。

第一个选项(不是很好) - 这会阻止主线程直到任务完成。

public static void main()
{
    downloadFile.Wait();
} 

第二个选项 - 与选项1类似,这也是阻止操作,但可用于检索返回的结果。根据您的程序复杂程度,这可能会导致崩溃。

public static void main()
{
    var someresult = downloadFile.Result;
}

第三个选项 - 将文件操作移动到另一个方法中并从主线程中移出,这样您就不必阻止应用程序。然后调用该代码并继续操作,并让您的下载通知等待文件下载结果的任何内容。如果您的程序需要从下载到功能的数据,请考虑使用Task.Wait()选项并计划文件下载失败。