后台任务被具有BackgroundTaskCancellationReason的OS取消,因为executiontimeexceeded

时间:2016-05-03 12:25:44

标签: c# win-universal-app background-task

我有一个UWP应用程序,在我的应用程序处于后台时,我已经添加了后台任务支持来执行某些操作。我完全按照这里提到的那样做:https://msdn.microsoft.com/en-us/windows/uwp/launch-resume/create-and-register-a-background-task

我有一个单独的后台任务项目,在我的软件包清单文件中,我已声明我的应用程序使用后台任务(但是“timer”任务,因为我使用的是TimerTrigger)。代码:

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

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

BackgroundTaskRegistration backgroundTaskRegistration = backgroundTaskBuilder.Register();

BackgroundTask类中的代码:

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秒)。 / p>

0 个答案:

没有答案