アプリの終了/非アクティブ化時にアプリ データを保存しようとしています。WP8 では、Async メソッドのみをサポートする StorageFile を使用しました。
問題は (私がこの記事を読んで疑い、確認したように) 簡単に言えば、OS ライフサイクル イベントと非同期メソッドがうまく混ざり合わないことです。したがって、これは機能しません (async/await がなくても)
private async void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
var dataSvc = SimpleIoc.Default.GetInstance<ICachedDataService>();
await dataSvc.StoreCachedDataAsync();
}
この記事では 2 つの回避策を提案していますが、どちらも理想的ではないようです。
- 同期操作をサポートする StorageFolder/File の代わりに、IsolatedStorage などの別の API を使用します。
- 保存と最終保存
(2) に関する私の問題は、できるだけ早く開始しても、保存する時間が保証されないことです。
(1) に関する私の問題は... べぇ... ServiceLocator/IoC パターンを使用しているため (どのパターンが何であるかを思い出せなかった)、ICachedDataProvider
たとえば のインターフェイスに同期操作を導入する必要があります。
他のアプローチはありますか?Async メソッドを同期メソッドに変換して、コードの再利用を増やすことはできますか?