Windows Phone 8 应用程序生命周期事件以及异步/等待(async/await)

3
当应用程序进入后台并恢复时,等待中的任务会发生什么?假设在接收到关于应用程序暂停的事件时未取消任务。从墓碑状态恢复和从后台恢复是否有区别?
如果没有直接的答案,即这取决于提供异步API的服务的实现,那么在这种情况下应该遵循什么最佳实践?
1个回答

4
当应用程序进入后台时,所有应用程序的线程都会被冻结。因此,任务将在应用程序被激活后恢复。
例如,让我们运行这段代码片段:
    private async void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        Debug.WriteLine("I've started");
        await Task.Delay(TimeSpan.FromSeconds(5));
        Debug.WriteLine("I'm done");
    }

    private void Application_Launching(object sender, LaunchingEventArgs e)
    {
        Debug.WriteLine("Application_Launching");
    }

    private void Application_Activated(object sender, ActivatedEventArgs e)
    {
        Debug.WriteLine("Application_Activated");
    }

    private void Application_Deactivated(object sender, DeactivatedEventArgs e)
    {
        Debug.WriteLine("Application_Deactivated");
    }

当我们运行这段代码片段,在五秒钟内点击“开始”按钮之前,我们可以看到以下输出:
Application_Launching I've started Application_Deactivated Application_Activated I'm done 根据上述事件顺序,您可以看到异步等待任务在停用和激活后完成。
关于异步等待的最佳实践:
1. 对于使用外部资源(例如WebRequest)的任何操作,最好在其周围放置try-catch块,并进行一些有意义的错误处理。更多信息@http://msdn.microsoft.com/en-us/library/dd997415.aspx 2. 对于长时间运行的任务,如果在应用程序被停用时停止运行是有意义的,则使用TaskCancellationToken机制取消这些任务。更多信息@http://msdn.microsoft.com/en-us/library/dd997396.aspx

谢谢提供信息。只是为了确认,从墓碑状态恢复和普通后台有什么区别吗? - Haspemulator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接