如何暂停DispatchQueue安排的任务

时间:2018-04-04 00:24:38

标签: swift

我有一个游戏,我正在创建一个暂停按钮。暂停按钮需要停止然后恢复特定任务:

DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: {
        if self.ongoing {
            self.dispose()
        }
})

我正在考虑通过跟踪这个任务的安排时间以及跟踪暂停开始的时间这样做,然后我可以在玩家取消暂停后安排一个更新时间的新任务。但是,我不知道如何取消旧任务。是否有更简单的方法来暂停/暂停DispatchQueue安排的任务?

1 个答案:

答案 0 :(得分:0)

如果任务已经启动,最简单的方法是使用isCancelled变量,任务代码在其主循环中重复检查。要取消该任务,只需将isCancelled变量设置为true即可。您可能希望使用锁和/或信号量来使变量成为线程安全的。如果您使用OperationQueue而不是DispatchQueue,则Operation对象包含isCancelled操作,该操作是为此目的而准备的(如果您设置了{{1}在操作开始之前,isCancelled将跳过运行它。