我試圖在應用程序關閉/停用時保存應用程序數據。 在WP8中我使用了StorageFile,它只支持Async方法。應用程序生命週期事件(例如Application_Closing)上的異步方法
問題是(正如我在閱讀this article時懷疑並確認的),簡單地說,操作系統生命週期事件和異步方法不能很好地混合在一起。所以,這不工作(即使沒有異步/等待)
private async void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
var dataSvc = SimpleIoc.Default.GetInstance<ICachedDataService>();
await dataSvc.StoreCachedDataAsync();
}
文章建議2解決辦法,沒有一個似乎理想:
- 使用不同的API,例如IsolatedStorage而不是StorageFolder/File,它支持同步操作。
- 另存爲你去與保存到底
我和(2)的問題,它仍然不能保證,這將有時間來保存,即使我儘快啓動它儘可能。 (1)的問題是...... beh ...我使用ServiceLocator/IoC模式(我永遠不會記得哪個模式是什麼),所以這迫使我在界面中引入同步操作例如,ICachedDataProvider
。
有沒有其他方法?是否可以將Async方法轉換爲同步方法以增加代碼重用?
這是我在我的答案中推薦的「卸載到另一個線程」選項。如果你的'ICachedDataService'是線程安全的,這是最簡單的解決方案。 –
@StephenCleary,啊......太棒了......在發佈我之前我沒有看到你的答案。 –