Фоновая задача отменяется ОС с помощью 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 секунд).