【问题标题】:OnNavigatedTo and async/await in Windows PhoneWindows Phone 中的 OnNavigatedTo 和 async/await
【发布时间】:2013-02-04 11:14:47
【问题描述】:

这个问题是关于最佳实践的。我有一个覆盖了 OnNavigatedTo 的 PhoneApplicationPage,我想在那里等待一些异步调用。当等待某个呼叫时,导航会发生什么?我的假设是在等待的调用返回之前导航不会完成。通过扩展,它将使调用的异步性质变得无用。是真的吗?

另一件事是 OnNavigatedTo 返回 void,我无法将其更改为 Task。反过来,这意味着我的异步方法中的任何异常都会使应用程序完全崩溃。当然可以捕获异常,但我再次担心这是否是一种好方法。

总结一下:有人在 OnNavigatedTo 中使用 async/await 吗?你的经验是什么?您将它推荐给您的朋友或同事的可能性有多大? :)

【问题讨论】:

    标签: c# windows-phone-7 navigation windows-phone-8


    【解决方案1】:

    首先,我的回答是关于 WP7 + Async CTP,而不是 WP8。但是,我怀疑这在 WP8 中有所改变。

    我的假设是导航不会完成,直到等待 调用返回

    错误的假设。导航将在第一次等待时完成。

    我的异步方法中的任何异常都会使应用程序完全崩溃

    不一定。您可以订阅TaskScheduler.UnobservedTaskException 事件,并通过调用UnobservedTaskExceptionEventArgs.SetObserved 将异常标记为观察到。但我宁愿捕捉异常..

    您将它推荐给您的朋友或同事的可能性有多大?

    如果您了解自己在做什么,它就可以正常工作。但是,由于导航将在您的异步方法完成之前很久就完成,因此该方法带来的价值很小。

    附:我在相关主题上的问题“WP7 synchronous web request” - 没有给出答案:-(

    【讨论】:

    • 我在 OnNavigatedTo 中要做的是从缓存中获取 View Model 的值,同时开始更新它们(这里有异步的东西),所以如果 async 方法稍后完成就好了.即使等待很长时间,我也要做的是检查导航是否完成。确实如此,你是对的。我想我会走这条路。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 2016-08-22
    • 1970-01-01
    相关资源
    最近更新 更多