调用 TaskInstance.Canceled 时如何停止后台任务?

Posted

技术标签:

【中文标题】调用 TaskInstance.Canceled 时如何停止后台任务?【英文标题】:How do I stop a background task when TaskInstance.Canceled is called? 【发布时间】:2019-11-16 20:32:45 【问题描述】:

我有一个天气应用程序,它会在后台任务中定期更新天气。当我在我的应用上运行 Windows 应用认证工具包时,它无法通过后台任务取消测试。

我阅读了微软官方文档。我已经实现了 BackgroundTaskCanceledHandler。这是代码。

volatile bool _CancelRequested = false;

protected async override void OnBackgroundActivated(BackgroundActivatedEventArgs args)
    
        args.TaskInstance.Canceled += new BackgroundTaskCanceledEventHandler(TaskInstance_Canceled);

        // update weather tile

    

private void TaskInstance_Canceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
    
        _CancelRequested = true;
    

当 TaskInstance_Canceled 被调用时,如何停止 OnBackgroundActivated 方法中的代码的执行?如果它是一个循环,我会使用 while,但它只是一大块只执行一次的代码。

我需要检查每一行代码的 if(_CancelRequested == true) 吗? 这似乎是一个非常不雅的解决方案,所以肯定有更好的方法。或者,也许,我显然在这里做错了什么。

【问题讨论】:

不是在每一行代码之后,而是在每个可能需要一些时间的操作之前(异步或繁重的处理)。 【参考方案1】:

我在每个等待的语句之后检查 CancelRequested 状态。

【讨论】:

以上是关于调用 TaskInstance.Canceled 时如何停止后台任务?的主要内容,如果未能解决你的问题,请参考以下文章

系统调用与函数调用

java三种调用方式(同步调用/回调/异步调用)

LINUX系统调用

引用调用 vs 复制调用调用

RPC 调用和 HTTP 调用的区别

js方法调用