后台任务自发完成C#

Background task spontaneous completion C#

注册后台任务:

    string myTaskName = "Task";

   foreach (var cur in BackgroundTaskRegistration.AllTasks)
        if (cur.Value.Name == myTaskName)
        {
           return;
        }

   await BackgroundExecutionManager.RequestAccessAsync();

   BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder 
   { 
        Name = "Task", 
        TaskEntryPoint = "Background.Task"
   };
   taskBuilder.SetTrigger(new TimeTrigger(15, true));
   BackgroundTaskRegistration myFirstTask = taskBuilder.Register();

后台任务在 Windows 运行时组件中创建为单独的 class:

public sealed class Task : IBackgroundTask 
        {
            public async void Run(IBackgroundTaskInstance taskInstance)
            {
                BackgroundTaskDeferral deferral = taskInstance.GetDeferral();

//logic, send http get request, connect to db

                deferral.Complete();
            }
}

当执行任务的时候-它可能运行随机次数(1-15次)然后自发终止不再开始,解决这个问题需要重新注册任务。可能是什么原因?

VS 在我想要 运行 任务时显示此错误:

开启 Windows Phone 周期性后台任务以至少 30 分钟的间隔执行。

Windows has a built-in timer that runs background tasks in 15-minute intervals. Note that on Windows Phone, the interval is 30 minutes.

(来源:https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh977059.aspx?f=255&MSPPError=-2147217396

如果我是你,我会将时间间隔更改为更安全的值(例如 60 分钟)- 你以后可以随时尝试更小的间隔。并查看 oneShot 标志,在您的情况下该标志设置为 true 。将其设置为 false 可使您的任务 运行 不止一次。

另外,您的异常看起来也不健康。你说它甚至发生在后台任务为空的情况下 - 为了安全起见,你应该修复它。

我建议您使用 Visual Studio 中的生命周期功能手动启动和调试您的 backgo运行d 任务几次。可能还有其他的事情导致你的任务挂掉。

但首先检查间隔。