当应用程序关闭/停用时,我正在尝试保存应用程序数据。在 WP8 中我使用了 StorageFile,它只支持 Async 方法。
问题是(正如我在阅读本文时怀疑并确认的那样),简单地说,操作系统生命周期事件和异步方法不能很好地混合在一起。所以,这不起作用(即使没有异步/等待)
private async void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
var dataSvc = SimpleIoc.Default.GetInstance<ICachedDataService>();
await dataSvc.StoreCachedDataAsync();
}
该文章提出了两种解决方法,但似乎都不理想:
- 使用不同的API,例如IsolatedStorage 而不是StorageFolder/File,它支持同步操作。
- 即用即存与最终保存
我对(2)的问题是,即使我尽快启动它,它仍然不能保证它有时间保存。
我对 (1) 的问题是……嗯……我正在使用 ServiceLocator/IoC 模式(我永远不记得哪个模式是什么),所以这迫使我在 的接口中引入同步操作ICachedDataProvider
。
还有其他方法吗?是否可以将 Async 方法转换为同步方法以增加代码重用?