Фоновая задача отменяется ОС с помощью BackgroundTaskCancellationReason, поскольку время выполнения превышено

У меня есть приложение UWP, в которое я добавил поддержку фоновых задач для выполнения определенных действий, пока мое приложение находится в фоновом режиме. Я делаю именно так, как указано здесь: https://msdn.microsoft.com/en-us/windows/uwp/launch-resume/create-and-register-a-background-task

У меня есть один отдельный проект для фоновых задач, и в моем файле манифеста пакета я объявил, что мое приложение использует фоновые задачи (но задача "таймер", так как я использую TimerTrigger). Код:

BackgroundTaskBuilder backgroundTaskBuilder = new BackgroundTaskBuilder { Name = "NotificationUpdater", TaskEntryPoint = "NamespaceOfMyBackgroundTaskInterfaceImplementation.BackgroundTask"};

backgroundTaskBuilder.SetTrigger(new TimeTrigger(15, false));

BackgroundTaskRegistration backgroundTaskRegistration = backgroundTaskBuilder.Register();

Код внутри класса Background Task:

namespace NamespaceOfMyBackgroundTaskInterfaceImplementation
{
    public sealed class BackgroundTask : IBackgroundTask
    {
        public async void Run(IBackgroundTaskInstance taskInstance)
        {
            //Code to run in the background

            taskInstance.Canceled += OnTaskInstanceCanceled;
        }

        private void OnTaskInstanceCanceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
        {
            _logger.LogInfo("Background Agent: The Operating System requested cancellation. Reason: {0}.", reason);
        }
    }
}

Когда я закрываю свое приложение, через 20-25 минут запускается фоновая задача, но когда начинается выполнение Run() метод, ОС отменяет выполнение с BackgroundTaskCancellationReason как executiontimeexceeded, Иногда отмена происходит сразу после начала выполнения фоновой задачи.

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

Изменить: я добавил некоторые записи, чтобы узнать время и вот что я нашел:

BG Task started at 5/4/2016 5:58:25 PM
BG Task Cancelled at 5/4/2016 5:58:50 PM

Таким образом, он даже не ожидает 30 секунд (что считается временным пределом для выполнения фоновой задачи) и завершает его примерно через 25 секунд (в некоторых случаях эта разница во времени составляла всего 20 секунд).

0 ответов

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