gpt4 book ai didi

c# - 应用程序生命周期事件的异步方法(例如 Application_Closing)

转载 作者:行者123 更新时间:2023-11-30 22:15:18 25 4
gpt4 key购买 nike

我正在尝试在应用关闭/停用时保存应用数据。在 WP8 中我使用了 StorageFile,它只支持异步方法。

问题是(正如我在阅读 this article 时怀疑和确认的那样),简单地说,操作系统生命周期事件和异步方法不能很好地混合在一起。所以,这是行不通的(即使没有异步/等待)

private async void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
var dataSvc = SimpleIoc.Default.GetInstance<ICachedDataService>();
await dataSvc.StoreCachedDataAsync();
}

文章提出了 2 种解决方法,但似乎都不理想:

  1. 使用不同的 API,例如IsolatedStorage 而不是 StorageFolder/File,它支持同步操作。
  2. 边走边存还是最后保存

我对 (2) 的问题是,即使我尽快启动它,它仍然不能保证它有时间保存。

我对 (1) 的问题是……嗯……我使用的是 ServiceLocator/IoC 模式(我永远记不起哪个模式是什么),所以这迫使我在 ICachedDataProvider,例如。

还有其他方法吗?是否可以将 Async 方法转换为同步方法以增加代码重用?

最佳答案

Is it possible to convert an Async method into a synchronous method to increase code reuse?

不幸的是,没有。您可以采用多种方法来包装这些方法,但没有一种是万无一失的。 This blog entry描述了各种方法。对于您的情况,我建议卸载到另一个线程;它最容易开始工作,但只有 ICachedDataProvider 是线程安全的时才会工作。

关于c# - 应用程序生命周期事件的异步方法(例如 Application_Closing),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18034516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com