我有一个下载文件的异步方法。
public async Task DownloadFile()
{
await doDownload();
}
我从main方法中调用此方法。我面临的问题是异步方法在下载文件之前返回。
在main方法中使用Thread.Sleep()可以解决问题。有没有更好的方法来实现这个目标?
答案 0 :(得分:0)
最好不要睡眠主线程,因为它会杀死响应并引入死锁的可能性。如果您的下载时间比您睡眠时间长,那么它将失败。如果您循环睡眠以解决此问题且文件永远不会下载,您可以永远睡眠。
第一个选项(不是很好) - 这会阻止主线程直到任务完成。
public static void main()
{
downloadFile.Wait();
}
第二个选项 - 与选项1类似,这也是阻止操作,但可用于检索返回的结果。根据您的程序复杂程度,这可能会导致崩溃。
public static void main()
{
var someresult = downloadFile.Result;
}
第三个选项 - 将文件操作移动到另一个方法中并从主线程中移出,这样您就不必阻止应用程序。然后调用该代码并继续操作,并让您的下载通知等待文件下载结果的任何内容。如果您的程序需要从下载到功能的数据,请考虑使用Task.Wait()
选项并计划文件下载失败。