我有一个Xamarin.Forms解决方案,它在UWP项目中具有持久性。现在,对于UWP,文件读取操作是异步的,这导致我的程序在异步文件读取完成之前刷新自身。基本上我有一个public async Task<CustomTable> Load(Level level)
来将级别信息读入CustomTable
。所以当我用新的关卡信息更新我的模型时:
_model.NewGame();
_Size = _model.Size;
其中NewGame()
最终调用以从文件中读取级别信息:
public async void NewGame()
{
...
_table = await _fileAccess.Load(_level);
....
}
现在我知道了,我不应该创建一个无效的异步函数,但是文件加载是异步的,所以我也必须使NewGame()
异步。但是,如果我这样做,我最终不得不做出默认的protected override void OnStart()
异步,我很确定不是那样的。有什么办法可以不异步读取文件吗?使文件操作异步的重点是什么?
答案 0 :(得分:3)
导致我的程序在异步文件读完成之前刷新自己
是。这是完全正常的。
您需要设计应用在加载时的样子,同步初始化为“加载”状态,启动异步文件读取(s)你的创业公司。
当文件读完后,您需要使用该数据更新您应用的视图。
我有NotifyTask<T>
type可能有助于此。
答案 1 :(得分:1)
任何类型的IO都需要时间,并且可能被其他操作阻止。您不希望在等待IO操作完成时阻止您的应用程序,因此使文件IO操作异步有帮助。