Быстрое возобновление работы приложения WP8 с асинхронными методами

В моем приложении Windows Phone 8 я использую асинхронные методы для получения данных с сервера.

После реализации Fast App Resume функциональность еще одна проблема встала для меня. Асинхронный метод, который получает данные с сервера, генерирует исключение типа System.Net.WebException когда это возобновится.

Чтобы воспроизвести проблему, достаточно нажать кнопку запуска, когда приложение загружает данные асинхронным способом.

Например, у меня есть страница, которая загружает уведомление пользователя. Я позвонил async void GetNotifications() метод, который далее вызывает метод ниже, чтобы получить строку ответа.

    public async Task<string> Get(string URL)
    {
        var request = WebRequest.Create(new Uri(URL)) as HttpWebRequest;

        if (APIHelper.APIHandshake != null)
            request.Headers["Cookie"] = "ii=" + APIHelper.APIHandshake.Sid + ";";

        return await httpRequest(request);
    } 

реализация метода httprequest приведена ниже.

    private async Task<string> httpRequest(HttpWebRequest request)
    {
        string received;

        using (var response = (HttpWebResponse)(await Task<WebResponse>.Factory
            .FromAsync(request.BeginGetResponse, request.EndGetResponse, null)))
        {
            using (var responseStream = response.GetResponseStream())
            {
                using (var sr = new StreamReader(responseStream))
                {
                    //cookieJar = request.CookieContainer;
                    //responseCookies = response.Cookies;
                    received = await sr.ReadToEndAsync();
                }
            }
        }

        return received.Replace("[{}]", "[]")
                .Replace("[{},{}]", "[]")
                .Replace("\"subcat_id\":\"\"", "\"subcat_id\":\"0\"");
    }

Пользователь просто щелкает меню, которое открывает страницу уведомлений, а затем мгновенно нажимает кнопку запуска телефона, чтобы деактивировать приложение. Когда пользователь нажимает на плитку приложения из меню "Пуск", генерируется исключение.

Любое решение? будет работать деактивация обнаружения в режиме ожидания?

1 ответ

Возможно, это не лучшее решение, но можно не отменить асинхронный запрос, добавив эту строку кода в метод InitalizePhoneApplication() на странице app.xaml.cs.

PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode.Disabled;

Узнайте больше об этой собственности здесь
Проверьте это, это должно решить проблему, но я не притворяюсь, что это лучшее, что нужно сделать....

Другие вопросы по тегам