c# - 取消后台任务只会使其暂停
问题描述
我取消注册我的任务(我删除了 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 中设置布尔属性。在您的后台任务中,在执行期间定期检查此属性,如果设置,则取消该进程。
推荐阅读
- docker - 使用 docker-compose 在 kibana 中运行时如何将弹性搜索端口从 9200 映射到 92xx
- python - 屏幕抓取表、清理和加载到数据框
- angular - RxJs/Redux/Angular - 来自多个可观察流的动态排序函数
- python - Selenium:与 AWS Lambda 首次成功连接后连接被拒绝
- ruby-on-rails - Rails 祖先 gem + 渲染并以新形式选择类别/子类别
- java - 从 java 程序内部运行一个 docker 容器
- powershell - 防止在批处理文件中解释多行命令
- python - 你如何调用列表中的位置,它是一个字符串?
- c# - 如何处理特定的 IOException?
- git - 如何在不调用 Github API 的情况下获取 GitBash 中特定分支的现有 Pull Request ID 和 Url?