OS可以取消/终止后台任务有或没有通知。 例如...如果您注册了一个15分钟的内置bgtask并执行任务取消,您可能会在一天内看到该任务被取消多次。
我的建议是...尝试运行bgtask几次“午夜”内要解决的任务取消。
- 实现你的bgtask取消。
- 以1小时的间隔注册您的任务。
- 在任务开始时,检查时间和标记,如果时间是'午夜'且标记未设置,则执行任务。
- 在localsettings处设置'done'标志。背景抵消的
细节在这里。 https://msdn.microsoft.com/en-us/windows/uwp/launch-resume/handle-a-cancelled-background-task
这我的答案可能帮助你 Timetrigger not firing backgroundtask UWP
这里是我的实现bgtask的。它支持取消。
public async void Run(IBackgroundTaskInstance taskInstance)
{
string dbgout = "";
var startTime = DateTime.Now;
dbgout += "BgTask ";
var cost = BackgroundWorkCost.CurrentBackgroundWorkCost;
var cancel = new System.Threading.CancellationTokenSource();
taskInstance.Canceled += (s, e) =>
{
dumpLog("Canceled.");
cancel.Cancel();
cancel.Dispose();
};
try
{
_deferral = taskInstance.GetDeferral();
dbgout += cost.ToString() + " ";
switch (cost)
{
case BackgroundWorkCostValue.Low:
case BackgroundWorkCostValue.Medium:
await TimeConsumedTaskLowMidAsync().AsTask(cancel.Token);
break;
case BackgroundWorkCostValue.High:
await TimeConsumedTaskHighAsync().AsTask(cancel.Token);
break;
default:
break;
}
}
catch (Exception e)
{
dbgout += ("Failed " + e.Message + "...");
}
finally
{
dumpLog(dbgout + " " + (DateTime.Now - startTime).TotalSeconds.ToString("F1"));
_deferral.Complete();
}
}
感谢队友!即使我生气了,开发人员无法在特定的时间安排后台任务,就像官方的闹钟应用一样简单,我接受了你的回答。我不记得有一次警报被取消。微软应该给予开发者更多的权力。这是一个耻辱。再次感谢。我会尝试你的想法几天,看看。 –