我在dispatchQueue.global().async任务中运行一个无限循环来振动我的手机,这样我的用户界面就不会冻结,但问题是我一直无法停止它。下面是我的代码

var queue: DispatchWorkItem?

queue = DispatchWorkItem {
            while (self.l > 1)
            {
                AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
            }
        }

        DispatchQueue.global().async(execute: queue!)

下面是当用户离开屏幕时我试图阻止它的代码
override func viewWillDisappear(_ animated: Bool) {
        queue?.cancel()
        l=0
        DispatchQueue.global().async {
            self.queue?.cancel()
        }
        print("view will disapear")
    }

尝试了几乎所有的方法,但仍然未能停止全局调度任务。
PS:我是iOS开发的新手:)

最佳答案

问题已经解决,实际上不应该首先使用dispatch global async。尝试过用定时器来完成它,它工作了,每秒钟都会震动,并且不会冻结用户界面,在调用timer.invalidate()之后也很容易停止。谢谢你们的帮助:)

关于ios - swift 停止DispatchQueue.global()。async任务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54982624/

10-14 05:38