取消后台任务只会让它暂停

Canceling background task only makes it go suspended

我取消注册我的任务(我删除了 If 以确保删除所有任务。):

foreach (var taskA in BackgroundTaskRegistration.AllTasks)
{
    //if (taskA.Value.Name == exampleTaskName)
    {
        taskA.Value.Unregister(true);
    }
}

然后我尝试重新创建它,并检查它是否不存在:

private async void LaunchBackground()
{
    await BackgroundExecutionManager.RequestAccessAsync();

    foreach (var taskA in BackgroundTaskRegistration.AllTasks)
    {
        if (taskA.Value.Name == exampleTaskName)
        {
            await new ApplicationTrigger().RequestAsync();
            return;
        }
    }

    var builder = new BackgroundTaskBuilder();

    builder.Name = exampleTaskName;
    builder.TaskEntryPoint = "Background.BackgroundTask";

    ApplicationTrigger _AppTrigger = new ApplicationTrigger();
    builder.SetTrigger(_AppTrigger);

    builder.Register();

    await _AppTrigger.RequestAsync();
}

我的任务现在只是延迟并做一些其他事情,取消时释放它:

    public void Run(IBackgroundTaskInstance taskInstance)
    {
        _deferral = taskInstance.GetDeferral();
        taskInstance.Canceled += new BackgroundTaskCanceledEventHandler(OnCanceled);
        AddWatched();
    }

    private void OnCanceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
    {
        _deferral.Complete();
    }

但是当我尝试取消和注销任务时,它只是挂起。当我再次启动它时,它表现得很奇怪(我认为现在有两个实例,它们都试图同时做同样的事情)。

理想情况下,我希望能够终止后台任务而不是后台任务 - 或者如果这不起作用,如果任务被暂停,它应该被取消暂停而不是创建另一个任务并且旧任务被取消暂停.

如果您想取消,请在您应用的 ApplicationSettings 中设置一个布尔值 属性。 在您的后台任务中,在执行期间定期检查此 属性,如果设置,则取消该过程。